如何在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"));我想函数必须是递归的,才能降到最深的水平。
3 回答
烙印99
TA贡献1829条经验 获得超13个赞
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&
search_rsearch_r($subarray, $key, $value, &$results).
忽然笑
TA贡献1806条经验 获得超5个赞
// I changed your input example to make it harder and// to show it works at lower depths:$arr = array(0 => array('id'=>1,'name'=>"cat 1"),
1 => array(array('id'=>3,'name'=>"cat 1")),
2 => array('id'=>2,'name'=>"cat 2"));//here's the code:
$arrIt = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach ($arrIt as $sub) {
$subArray = $arrIt->getSubIterator();
if ($subArray['name'] === 'cat 1') {
$outputArray[] = iterator_to_array($subArray);
}}- 3 回答
- 0 关注
- 1153 浏览
添加回答
举报
0/150
提交
取消
