PHP多维数组搜索返回键

时间:2017-06-14 02:49:36

标签: php arrays search key associative-array

我正在尝试搜索一个数组数组,如果找到了针,我想返回或至少知道匹配的键。

例如:

['foo'] => 
     ['bar'] => 'blah'

搜索' blah '我需要知道有一个匹配,键是' foo '和' bar '

我设法实现了一个搜索,它返回匹配的布尔值:

function search_array($needle, $haystack) {
        if(in_array($needle, $haystack)) {
            return true;
        }
        foreach($haystack as $element) {
            var_dump($element);
            if(is_array($element) && $this->search_array($needle, $element))
               return true;
        }
        return false;
}

但我正在努力学习如何知道钥匙。这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

是的,这是可能的。一种解决方案是:

  • 在基本案例中使用array_search()获取密钥。
  • 在递归的情况下,当迭代大海捞针中的每个元素时(在递归之前),使用foreach$key => $value语法。然后,当递归调用产生一个值时,检查返回的值是否是一个数组(使用is_array()) - 如果是,则使用array_unshift()将当前键推送到返回的数组。否则返回一个包含密钥和返回值的数组。

    function search_array($needle, $haystack) {
        if(in_array($needle, $haystack)) {
            return array_search($needle, $haystack);
        }
        foreach($haystack as $key => $element) {
            if(is_array($element) && search_array($needle, $element)) {
                $searchReturn = search_array($needle, $element);
                if (is_array($searchReturn)) {
                    array_unshift($searchReturn, $key);
                    return $searchReturn;
                }
                return [$key, $searchReturn];
            }
        }
        return false;
    }
    

this playground example中看到它。

答案 1 :(得分:1)

你可以这样做,因为它是二维数组。

function search_array($needle, $haystack) {
    foreach($haystack as $key => $value) {
        if ($value == $needle) {
            return array($key);
        } else if (is_array($value)) {
            foreach ($value as $k => $v) {
                if ($v == $needle) {
                    return array($key, $k);
                }
            }
        }
    }
}

对于n维数组,您应该使用递归函数...