Как осуществить разбор сложного массива?

Здравствуйте!

Имеется массив следующей архитектуры:

Array(

  [555] => Array(
            [0] => Array(
                   ['name'] => Name1
                   ['id'] => 100
                   ['id2'] => 666
            )
            [1] => Array(
                   ['name'] => Name2
                   ['id'] => 102
                   ['id2'] => 5
            )

  )
  [666] => Array(
            [0] => Array(
                   ['name'] => Name3
                   ['id'] => 105
                   ['id2'] => 1000
            )
            [1] => Array(
                   ['name'] => Name4
                   ['id'] => 108
                   ['id2'] => 5
            )

  )
)


Соответственно, перебор массива начинается сверху вниз (включая дочерние массивы).
В [555][0]['id2'] хранится ключ элемента, который должен обрабатываться после данной записи.

Пример обработки:
[555][0][...]
[666][0][...]
[666][1][...]
[555][1][...]

И таких вложений может быть целая куча.

Прошу прощения, если неясно выражаюсь. Спасибо.
  • Вопрос задан
  • 2718 просмотров
Решения вопроса 2
Используйте рекурсивную функцию, с передачей параметров по ссылке.
Ответ написан
@VeMax
Если все-таки структура такая как в примере и уровней всего 2,то :
foreach ($array as $fLevel) {
    foreach ($fLevel as $sLevel) {
       echo $sLevel['name'];    
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Так, номера 555 и 666 это элементы массива? Номера 0, 1 это элементы вложенного массива? Нужно пробежать все элементы в последовательности id -> id2, т.е. сначала ищем id с самым наименьшим номером, из него берем id2 и ищем id и этим номером и так далее? Соответственно, как я понимаю, элементы 555, 666, 0, 1 к собственно id и id2 никакого отношения не имеют?

Если это так, то легче преобразовать весь набор данных в однородный массив с элементами по id. Далее вся задача выливается в просто вытаскивании элементов по номерам. Упс, написал про scala, а тут php, но задача все равно точно такая-же, рекурсия с переливом в отдельный flat-массив.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы