嵌套到无限深度的多维数组

ste*_*nmc 6 php

我有一个多维数组嵌套到未知/无限深度.我希望能够遍历每个元素.我不想用,foreach(){foreach(){foreach(){}}}因为我不知道深度.

我最终会寻找所有名为" xyz"的嵌套数组.有没有人有任何建议?

sal*_*the 10

我最终会寻找所有名为"xyz"的嵌套数组.有没有人有任何建议?

当然.基于使用一些迭代器的建议,您可以:

$iterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator($array),
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $key => $item) {
    if (is_array($item) && $key === 'xyz') {
        echo "Found xyz: ";
        var_dump($item);
    }
}
Run Code Online (Sandbox Code Playgroud)

其他答案之间的重要区别在于,该RecursiveIteratorIterator::SELF_FIRST标志用于在迭代时使非叶(即父类)项(即数组)可见.

你也可以使用ParentIterator数组迭代器,而不是检查循环中的数组,以使后者更整洁一些.


ste*_*nmc 1

使用上面的评论,我找到了答案:

function findXyz($array){
    foreach($array as $foo=>$bar){
      if (is_array($bar)){
         if ($bar["xyz"]){
             echo "<br />The array of xyz has now been found";
             print_r($bar['xyz']);
         }else{
            findXyz($bar);   
         } 
      }
    } 
}
findXyz($myarray);
Run Code Online (Sandbox Code Playgroud)

这将循环遍历所有嵌套数组,并根据我最初的请求查找具有 xyz 子数组的任何元素。array_walk_array 和 RecursiveIteratorIterator 无法实现这一点。