Нужна помощь с циклом при обратке массива JSON в PHP
Вот уже несколько часов воюю с добычей данных из многомерного массива JSON
После всех манипуляций с запросам применяю
$arr = json_decode($response, true);
echo '<pre>';
print_r($arr); //вывожу массив на страницу
echo '</pre>';
Получаю вот такой многомерный массив
Array
(
[complexes] => Array
(
[0] => Array
(
[id] => 111111
[name] => Name
[houses] => Array
(
[0] => Array
(
[id] => 2222222
[name] => Name1
[address] => Address1
)
[1] => Array
(
[id] => 333333
[name] => Name2
[address] => Address2
)
[2] => Array
(
[id] => 333333
[name] => Name3
[address] => Address2
)
)
)
)
)
Теперь задача состоит в том, чтобы выгрузить из этого массива данные. Провожу вот такие манипуляции:
function printValues($arr) {
global $count;
global $values;
// проверяем, что это массив, просто не было похоже на обычный JSON, с которым доводилось работать раньше - решил перестраховаться.
if(!is_array($arr)){
die("ERROR: Input is not an array");
}
// запускаем основной цикл, если значение само по себе является массивом, рекурсивно вызываем эту же функцию добавляем все найденные значения в массив элементов вывода и увеличиваем счетчик на 1 для каждого найденного значения
foreach($arr as $key=>$value){
if(is_array($value)){
printValues($value);
} else{
$values[] = $value;
$count++;
}
}
// возвращаем общее количество и значения, найденные в массиве
return array('total' => $count, 'values' => $values);
}
// декодируем JSON-данные в формат ассоциативного массива PHP
$arr = json_decode($response, true);
// вызываем функцию и печатаем все значения
$result = printValues($arr);
echo "" . $result["total"] . " value(s) found: ";//Выводит число всех значений (чисто для проверки)
// выводим одно значение
echo $arr["complexes"][0]["id"] . ""; // выводит: 111111
echo '<br>';
echo $arr["complexes"][0]["houses"][0]["name"] . ""; // выводит: Name1
echo '<br>';
echo $arr["complexes"][0]["houses"][1]["name"] . ""; // выводит: Name2
echo '<br>';
echo $arr["complexes"][0]["houses"][2]["name"] . ""; // выводит: Name3
С таким небольшим массивом все довольно неплохо получается. Но есть проблема, далее предстоит работа с массивом в сотни раз больше и с большей вложенностью.
Начинаю обращаться к циклу foreach
Пишу:
foreach ($arr->complexes->0->houses as $a) {
echo $a->name;
echo '<br>';
}
Но получаю ошибки. Скорее всего где-то косяк. Помогите разобраться, пожалуйста!