首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一定深度搜索数组?

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

Stack Overflow用户
提问于 2015-03-11 05:36:46
回答 3查看 946关注 0票数 2

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

样本代码:

代码语言:javascript
复制
$attribute[5]['group'][1]['f'][4]['id'][18]['fc'][20]

样本阵列

有什么方法可以根据我想要的深度和键获得数组,,而不知道它之前的级别

假设我只有部分信息,如键20(最后一个键),是否有任何方法可以在第9维得到带键20的数组?

理想的函数应该如下所示

代码语言:javascript
复制
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 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-11 08:35:49

这样的东西可以使用示例数组数据来工作。

代码语言:javascript
复制
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;

Note --这假设每个数组最多只包含其中的一个数组。如果您需要一个可以处理包含相同深度的多个数组的解决方案,那么还需要做更多的工作。

票数 1
EN

Stack Overflow用户

发布于 2015-03-11 05:52:36

一种方法是使用递归。

代码语言:javascript
复制
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);
        } 
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-10-28 12:05:07

代码语言:javascript
复制
function depth(&$array, $depth_level = 0) {
    $cdepth = 0;
    while($a = array_shift($array)) { $cdepth++;
        if($depth_level==$cdepth) return $a;
    }
    return $array;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28979306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档