Php 获取嵌套最深的数组

Php 获取嵌套最深的数组,php,multidimensional-array,nested,Php,Multidimensional Array,Nested,我正在处理一种writersblock,我不知道如何获得数组中嵌套最深的(子)数组 如果我有以下数组: $testArray= array( 'test1' => 'SingleValue1', 'test2' => 'SingleValue2', 'test3' => array(0,1,2), 'test4' => array(array(3,4,array(5,6,7)), array(8,9,array(10,11,12)),13,

我正在处理一种writersblock,我不知道如何获得数组中嵌套最深的(子)数组

如果我有以下数组:

$testArray= array(
    'test1' => 'SingleValue1',
    'test2' => 'SingleValue2',
    'test3' => array(0,1,2),
    'test4' => array(array(3,4,array(5,6,7)), array(8,9,array(10,11,12)),13,14),
    'test5' => array(15,16,17, array(18,19,20)),
);
我需要从testArray中提取以下(子)数组:

  • 阵列(5,6,7)
  • 阵列(10,11,12)
在这个例子中有三个层次

我在递归函数中尝试了很多使用foreach的方法,但是最终的结果总是没有结果,要么是所有元素,要么是最后一个迭代的元素

我并不期望得到一个完整的编码答案(哈哈),但有人能给我一些关于如何实现我的目标的指示吗

当我编写了代码后,我很乐意提出更具体的问题或提供解决方案。

课堂扩展解决方案:

输出:

Array
(
    [0] => Array
        (
            [0] => 5
            [1] => 6
            [2] => 7
        )

    [1] => Array
        (
            [0] => 10
            [1] => 11
            [2] => 12
        )
)
您可以将这种方法包装到一个命名函数中,并使用它获取最深层的数组


享受

罗曼的解决方案似乎有效,但我很难读懂那种方法。这是我找到最深子阵列的版本

有关每个步骤的解释,请参见我的内联注释。基本上,它检查每个数组中的子数组,然后在可能的情况下迭代/递归,并使用
级别
计数器作为键存储子数组

我的自定义函数将返回一个数组数组

代码:()()

函数deepestarray(数组$array,int$level=0,数组和$lower=[]):数组
{
$subarray=array_filter($array,'is_array');
如果($子阵列){//则存在更深的级别
foreach($subarray作为$subarray){
deepestarray($subarray,$level+1,$lower);//递归每个子数组
}
}else{//分支中最深的级别
$lowestLevel=key($lowest)??$level;//如果最低数组为空,则key将为null,回退到$level值
如果($lowestLevel==$level){
$lower[$level][]=$array;//将数组推送到结果中
}elseif($lowestLevel<$level){
$looster=[$level=>[$array]];//用新的最低数组覆盖
}
}
返回当前($最低);//返回最深的数组
}
瓦鲁出口(
Deepestarray($testArray)
);

发布您已经尝试过的内容,我们可以帮助您调试IT您是否正在寻找此特定数据集中的特定阵列?或者这是一个关于能够提取子数组的更深层次的问题吗?我猜数组不是静态的?你怎么知道你需要的是5 6 7和10 11 12?我知道我需要这些,因为它们在TestArray中嵌套最深。你可以做的是为最深的嵌套数组的级别设置标志,这些级别可以初始化为0。一旦它遍历了所有内容,标志的新值就是嵌套最深的子数组的级别。您必须再次运行迭代,以找到处于标志级别(最深级别)的子阵列并将其打印出来。实际上,我偶然发现了RecursiveIteratorIterator类,但大多数都没有文档记录。你的代码完成了这项工作。非常感谢。
Array
(
    [0] => Array
        (
            [0] => 5
            [1] => 6
            [2] => 7
        )

    [1] => Array
        (
            [0] => 10
            [1] => 11
            [2] => 12
        )
)
function deepestArrays(array $array, int $level = 0, array &$lowest = []): array
{
    $subarrays = array_filter($array, 'is_array');
    if ($subarrays) { // a deeper level exists
        foreach ($subarrays as $subarray) {
            deepestArrays($subarray, $level + 1, $lowest);  // recurse each subarray
        }
    } else {  // deepest level in branch
        $lowestLevel = key($lowest) ?? $level;  // if lowest array is empty, key will be null, fallback to $level value
        if ($lowestLevel === $level) {
            $lowest[$level][] = $array;  // push the array into the results
        } elseif ($lowestLevel < $level) {
            $lowest = [$level => [$array]]; // overwrite with new lowest array
        }
    }
    return current($lowest);  // return the deepest array
}

var_export(
    deepestArrays($testArray)
);