烙印99
代码: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通过引用而不是通过值获取它的第四个参数;&是至关重要的。FYI:如果您的PHP版本较早,则必须在打电话到search_r而不是在宣言中。也就是说,最后一行变成search_r($subarray, $key, $value, &$results).