码:
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条)