Нужна помощь с циклом при обратке массива 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>';
}

Но получаю ошибки. Скорее всего где-то косяк. Помогите разобраться, пожалуйста!


Ответы (0 шт):