Php 如何在一定深度搜索数组?

Php 如何在一定深度搜索数组?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个具有很多深度的多维数组,因为我有大约9维,所以我将展示我如何访问它们的代码 示例代码: $attribute[5]['group'][1]['f'][4]['id'][18]['fc'][20] 是否有任何方法可以在不知道之前的级别的情况下,根据我想要的深度和关键点来获取阵列 假设我只有部分信息,比如键20(最后一个键),有没有办法用键20获得第9维的数组 理想的函数应该是这样的 function get_by_depth($m_array,$depth,$key){ } $ar

我有一个具有很多深度的多维数组,因为我有大约9维,所以我将展示我如何访问它们的代码

示例代码:

$attribute[5]['group'][1]['f'][4]['id'][18]['fc'][20]

是否有任何方法可以在不知道之前的级别的情况下,根据我想要的深度和关键点来获取阵列

假设我只有部分信息,比如键20(最后一个键),有没有办法用键20获得第9维的数组

理想的函数应该是这样的

function get_by_depth($m_array,$depth,$key){

}

$array=get_by_depth($attribute,9,20);
//will search through available level 9 item
//if there are key 20 at level 9 return the array or value 

一种方法是使用递归

function recursive($array, $searchKey){
    foreach($array as $key => $value){
        //If $value is an array.
        If($searchKey == $key){
           echo $value; //or do something now that it is found
           break;
        }
        if(is_array($value)){
            //We need to loop through it.
            recursive($value, $searchKey);
        } 
    }
}

使用示例数组数据可以实现类似的功能

function get_by_depth($array, $depth, $key, $currentDepth = 0)
{
    if ($currentDepth == $depth) {

        return isset($array[$key]) ? $array[$key] : null;

    } else {

        foreach ($array as $k => $v) {

            if (is_array($v)) {
                return get_by_depth($v, $depth, $key, ++$currentDepth);
            }

        }

    }

}


echo "<pre>";
print_r(get_by_depth($array,8,'image'));exit;
函数按深度获取深度($array,$depth,$key,$currentDepth=0)
{
如果($currentDepth==$depth){
返回isset($array[$key])?$array[$key]:null;
}否则{
foreach($k=>v的数组){
if(is_数组($v)){
返回get_by_depth($v,$depth,$key,++$currentDepth);
}
}
}
}
回声“;
打印(按深度获取图像($array,8,'image');出口
注意
这假设每个数组中最多只包含一个数组。如果您需要一个解决方案来处理在同一深度级别包含多个数组的数组,那么将有更多的工作要做

如果数组在不同深度具有相同的键值,该怎么办?您能为这个用例编写一个理想的函数签名吗?我不完全清楚你在问什么。你想同时考虑维度和关键点还是仅仅考虑关键点?也许这个问题可以给你一些有用的想法@JonathanCrowe我已经更新了我的问题
function depth(&$array, $depth_level = 0) {
    $cdepth = 0;
    while($a = array_shift($array)) { $cdepth++;
        if($depth_level==$cdepth) return $a;
    }
    return $array;
}