有没有一种快速的方法来获取在多维数组中找到键值对的所有子数组?我不能说阵列有多深。
简单示例数组:
$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
代码:
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)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。