#php #codeigniter #multidimensional-array #foreach #nested-loops
#php #codeigniter #многомерный массив #foreach #вложенные циклы
Вопрос:
Здесь много вопросов / ответов на SO о многомерных массивах и циклах foreach, но я не нашел ни одного, который применим конкретно к моему случаю. Пожалуйста, сообщите, если вы думаете иначе.
Мой массив структурирован, как показано ниже, и выводится в представление CodeIgniter:
Array
(
[2] => Array //this is the unique user ID
(
[name] => Joe Schmoe
[cars] => Array
(
[112] => Array //this is the unique car ID
(
[cars_name] => Honda
[cars_type] => Sedan
[cars_color] => White
)
[102] => Array
(
[cars_name] => Toyota
[cars_type] => Sedan
[cars_color] => Black
)
[113] => Array
(
[cars_name] => Nissan
[cars_type] => Coupe
[cars_color] => Red
)
)
)
[5] => Array
(
[name] => Buck
[cars] => Array
(
[147] => Array
(
[cars_name] => Tesla
[cars_type] => Sedan
[cars_color] => Yellow
)
)
)
[1] => Array
(
[name] => Mike Mechanic
[cars] => Array
(
[140] => Array
(
[cars_name] => BMW
[cars_type] => SUV
[cars_color] => Blue
)
[145] => Array
(
[cars_name] => MB
[cars_type] => Sedan
[cars_color] => Gray
)
)
)
)
Мне нужна помощь в построении вложенных foreach
циклов, чтобы я мог иметь доступ к каждому из элементов во всем массиве.
Я пробовал эту вложенную foreach
структуру, но ничего не вышло.
foreach ($results as $data):
if (is_array($data)):
foreach ($data as $value):
if (is_array($value)):
foreach ($value as $row):
endforeach;
endif;
endforeach;
endif;
endforeach;
echo $row->cars_name //returns a non-object error
Кто-нибудь знает, как объединить этот вложенный цикл?
Спасибо за помощь, высоко ценится.
Комментарии:
1. Я получаю
Trying to get property of non-object
ошибку при попытке повторить элемент массива2. Это потому, что это не объект, и вы действуете так, как будто это один. Смотрите правку в моем ответе.
3. Вы пытаетесь получить доступ к переменной цикла вне цикла. Поместите это эхо во внутренний самый foreach
4. вау, кто-то проголосовал против без причины или предлагая помощь? никакой любви там не потеряно…
Ответ №1:
Вы получаете доступ к $row извне цикла. Если вы хотите обработать каждую строку, вы должны поместить этот код (echo) внутрь цикла.
Альтернативой могло бы быть использование array_walk_recursive. Это вызовет функцию обратного вызова для каждого значения в многомерном массиве.
[править]
Строка, которую вы получаете, также не является объектом. Это все еще массив. Попытайтесь
echo $row['cars_name'];
Комментарии:
1. спасибо за комментарий @goleztrol — я попробовал внутри цикла и все еще получаю ту же
Trying to get property of non-object
ошибку —2. @torr
echo $row['cars_name'];
вместоecho $row->cars_name
Ответ №2:
Я думаю, это сработает для вас..
foreach ($results as $result) {
if(is_array($result['cars'])){
foreach ($result['cars'] as $car) {
echo $car['cars_name'];
}
}
}
Также вы пытались получить доступ к элементу массива с помощью обозначения доступа к атрибуту класса.