开发者社区> 问答> 正文

如何在PHP中通过多维数组中的key => value搜索

有没有一种快速的方法来获取在多维数组中找到键值对的所有子数组?我不能说阵列有多深。

简单示例数组:

$arr = array(0 => array(id=>1,name=>"cat 1"), 1 => array(id=>2,name=>"cat 2"), 2 => array(id=>3,name=>"cat 1") ); 当我搜索key = name和value =“ cat 1”时,该函数应返回:

array(0 => array(id=>1,name=>"cat 1"), 1 => array(id=>3,name=>"cat 1") ); 我猜该函数必须递归才能深入到最深层次。

问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 00:42:14 501 0
1 条回答
写回答
取消 提交回答
  • 代码:

    function search($array, $key, $value) { $results = array();

    if (is_array($array)) {
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }
    
        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }
    
    return $results;
    

    }

    $arr = array(0 => array(id=>1,name=>"cat 1"), 1 => array(id=>2,name=>"cat 2"), 2 => array(id=>3,name=>"cat 1"));

    print_r(search($arr, 'name', 'cat 1')); 输出:

    Array ( [0] => Array ( [id] => 1 [name] => cat 1 )

    [1] => Array
        (
            [id] => 3
            [name] => cat 1
        )
    

    ) 如果效率很重要,则可以编写效率代码,以便所有递归调用将其结果存储在同一临时$results数组中,而不是将数组合并在一起,如下所示:

    function search($array, $key, $value) { $results = array(); search_r($array, $key, $value, $results); return $results; }

    function search_r($array, $key, $value, &$results) { if (!is_array($array)) { return; }

    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }
    
    foreach ($array as $subarray) {
        search_r($subarray, $key, $value, $results);
    }
    

    } 这里的关键是search_r通过引用而不是值来获取第四个参数。“&”号&至关重要。

    仅供参考:如果您使用的是旧版PHP,则必须在的调用中search_r而不是在其声明中指定引用传递部分。也就是说,最后一行变为search_r($subarray, $key, $value, &$results)。

    2020-02-07 00:42:40
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载