PHP - применять операции к массивам-потомкам независимо от родительских массивов

В многомерном массиве я пытаюсь выбрать все массивы-потомки с определенным ключом, независимо от их родительских массивов. Я знаю, что следующий синтаксис не работает, но, надеюсь, он поможет проиллюстрировать то, что я пытаюсь выполнить:

<?php
  foreach ($array[*][*]['descendant'] as $descendent) {
     // do stuff
  }
?>

Точно так же мне нужно выяснить, не содержат ли одноуровневые массивы этот ключ массива. Примерно так (опять же, я знаю, что синтаксис ужасно неправильный):

<?php
  foreach ($array[*][*]['descendant'] < 1 as $descendent) {
     // do stuff
  }
?>

1 ответ

Решение

Если всегда есть 3-мерный массив, вы можете использовать вложенный цикл:

foreach($array as $lv1) {
    foreach($lv1 as $lv2) {
        foreach($lv2['descendant'] as $descendent) {
              // do stuff
        }
    }
}

Если вы хотите поддерживать неограниченное количество измерений, вы можете использовать этот уродливый код

function drill($arr) {
    if (isset($arr) && is_array($arr)) {
        foreach($arr as $key => $value) {
            if ($key == 'descendant') {
                foreach($value as $descendent) {
                    // do stuff here
                }
            } else {
                drill($value);
            }
        }
    }
}
drill($array);
Другие вопросы по тегам