如何在PHP中通过多维数组中的key => value搜索 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

保持可爱mmm 2020-02-07 00:42:14 88

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

简单示例数组:

$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

PHP
分享到
取消 提交回答
全部回答(1)
  • 保持可爱mmm
    2020-02-07 00:42:40

    代码:

    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)。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题