PHP, отображающий многомерный массив

#php #arrays #multidimensional-array

#php #массивы #многомерный массив

Вопрос:

У меня есть этот массив, похожий на этот:

 $suppliers = array(
  'Utility Warehouse' => array('Gas' => array(0,0), 'Electricty' => array(0,0)),
  'British Gas' => array('Gas' => array(93,124), 'Electricty' => array(93,124)),
  'Eon' => array('Gas' => array(93,124), 'Electricty' => array(93,124))
);
  

Как можно отобразить информацию следующим образом

 Utility Warehouse
Gas: 0-0 Electricity 0-0

British Gas
Gas: 93-134 Electricity: 93-134

Eon
Gas: 93-124 Electricity: 93-134
  

Вы можете видеть, как отображаемые данные соответствуют данным в массиве. Я пробовал это:

 foreach($suppliers as $a){
    echo $a[0];
}
  

Но это ничего не делает. ЗАПУТАЛСЯ!

Комментарии:

1. Какая информация о PHP-массивах или циклах foreach заставила вас ожидать, что этот код приведет к этим результатам? Я в замешательстве относительно того, как вы представляли, что код, который у вас есть, будет выводить результаты, отформатированные с помощью новых строк, двоеточий и дефисов.

2. Я не ожидал, что все двоеточия, новые строки и т.д. …. это был пример того, что, как я надеялся, выведет имя поставщика, например

3. О, я понимаю, что вы имеете в виду. Ну, для дальнейшего использования, echo языковая конструкция принимает только строки в качестве аргумента, хотя она попытается преобразовать вещи (целые числа и т.д.) В строки. Массивы не имеют автоматического метода преобразования в строки, поэтому вы не можете echo преобразовать весь массив. Ознакомьтесь с примерами здесь .

Ответ №1:

 <?php 

foreach($suppliers as $supplier => $category) {
    echo $supplier . '<br />';
    foreach($category as $cat_name => $values_arr) {
        echo $cat_name . ': ' . implode('-', $values_arr) . '<br /><br />';
    }
}

?>
  

Ответ №2:

вы можете попробовать:

 foreach($suppliers as $name => $value) {
    echo $name . "<br />";
    foreach($value as $a => $price) {
        echo $a .': '. $price[0].'-'.$price[1];
    }
    echo "<br /><br />";
}
  

Ответ №3:

Ниже приведен код для достижения желаемого, но я предлагаю вам еще немного освежить свои навыки работы с PHP, поскольку это тривиальная задача.

 foreach($suppliers as $name => $data){
    echo $name . '<br/>';
    foreach($data as $utility => $value){
        echo $utility . ': ' . $value[0] . '-' . $value[1] . ' ';
    }
    echo '<br/><br/>';
}
  

Ответ №4:

Тот же ответ, что и у всех остальных (я слишком медленный). Вот рабочий пример:http://codepad.org/PDPEjAGJ

Кроме того, все, кто ответил на этот вопрос, включая меня, виновны в ложном кормлении. Ах, ну, что я буду делать за очки! :p

Ответ №5:

Вот простая рекурсивная функция, которую можно использовать. Я нашел его и изменил для целей презентации. Исходный источник находится в комментариях.

 function print_a($array, $level=0){
  # source: https://thisinterestsme.com/php-using-recursion-print-values-multidimensional-array/
  foreach($array as $key => $value){
    # If $value is an array.
    if(is_array($value)){
      echo str_repeat("-", $level). "<br>{$key}<br>rn";
      # We need to loop through it.
      print_a($value, $level   1);
    } else{
      # It is not an array, so print it out.
      echo str_repeat("-", $level) . "{$key}: {$value}<br>rn";
    }
  }
} # END FUNCTION print_a