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

时间:2015-03-11 05:36:47

标签: php arrays multidimensional-array

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

示例代码:

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

sample array

有没有办法让阵列基于我想要的深度和关键,不知道它之前的关卡

假设我只有部分信息,例如键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 

3 个答案:

答案 0 :(得分:1)

这样的事情可以使用你的样本数组数据。

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;

注意 这假设每个数组最多只包含一个内部的单个数组。如果您需要一个能够处理包含多个深度相同深度数组的数组的解决方案,那么还有很多工作要做。

答案 1 :(得分:0)

一种方法是使用递归

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);
        } 
    }
}

答案 2 :(得分:0)

function depth(&$array, $depth_level = 0) {
    $cdepth = 0;
    while($a = array_shift($array)) { $cdepth++;
        if($depth_level==$cdepth) return $a;
    }
    return $array;
}