Php 获取嵌套最深的数组
我正在处理一种writersblock,我不知道如何获得数组中嵌套最深的(子)数组 如果我有以下数组: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,
$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)
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)
);