首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:遍历多维数组并获取搜索元素的键数组

PHP:遍历多维数组并获取搜索元素的键数组
EN

Stack Overflow用户
提问于 2016-07-05 06:10:48
回答 1查看 52关注 0票数 0

在多维数组中,我尝试获取搜索元素的密钥数组。例如,我的初始数组是:

代码语言:javascript
复制
$f['Kitchen']['Dishes']['Mantovarka']=3;
$f['Kitchen']['Dishes']['Castrool']=91;
$f['Kitchen']['Dishes']['Separator']=10;
$f['Kitchen']['Product']=18;
$f['Kitchen']['Textile']=19;
$f['Kitchen']['Blue things One']['Juicemaker']=25;
$f['Kitchen']['Blue things One']['Freegener']=13;
$f['Kitchen']['Blue things']['Microwave']=4;
$f['Kitchen']['Blue things']['Iron']=24;

如果我尝试用这个函数获取“Separator”键的键数组:

代码语言:javascript
复制
$index=0; $array =[];
function getArrayOfkeys($needle, $haystack,$original,$array,$index) {

    $index++;
    $exists = false;

    if(is_array($haystack)){

        foreach ($haystack as $key => $val) {
            $array[$index]=$key;

            if($key == $needle){
                $exists = true;
                break;
            }elseif(is_array($val)){
                return getArrayOfkeys($needle, $val,$original,$array,$index);
            }

        }

    }else{
        $index--;
    }

    if($exists==true){
        return $array;
    }
    else{

        // I need here logic!!!    
    }
}

它还我:

代码语言:javascript
复制
[
    1 => 'Kitchen'
    2 => 'Dishes'
    3 => 'Separator'
]

这很好!

但是当我试图得到“果汁制造者”、“铁”或“产品”的一系列键时。它不能工作,因为我不能在元素后面调用getArrayOfkeys()函数:

代码语言:javascript
复制
$f['Kitchen']['Dishes']['Separator']=10;
  1. 如何在上述元素之后再调用?

我想要得到‘果汁制造者’的钥匙['Kitchen', 'Blue things One', 'Juicemaker']

用于“产品”键['Kitchen','Product']

用于“铁”键['Kitchen', 'Blue things','Iron']

  1. 我的功能对我来说似乎很没有优化,请帮助我,用优化它。
EN

回答 1

Stack Overflow用户

发布于 2016-07-05 07:09:15

请试用此功能:

代码语言:javascript
复制
function findKeyPath($arr, $key, $path = '') {
    foreach($arr as $k => $value) {
        if(is_array($arr[$k])) {
            $ret = findKeyPath($arr[$k], $key, $path.$k.',');
            if(is_array($ret)) {
                return $ret;
            }
        }else if($k == $key) {
            return explode(',', $path.$key);
        }
    }
    return null;
}

print_r(findKeyPath($f, 'Juicemaker'));
//Output: Array ( [0] => Kitchen [1] => Blue things One2 [2] => Juicemaker )

演示: https://3v4l.org/YJD7q

我希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38196304

复制
相关文章

相似问题

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