#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