如何在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 回答
![?](http://img1.sycdn.imooc.com/5333a0780001a6e702200220-100-100.jpg)
烙印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_r
search_r($subarray, $key, $value, &$results)
.
![?](http://img1.sycdn.imooc.com/54584dad0001dd7802200220-100-100.jpg)
忽然笑
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 关注
- 1086 浏览
添加回答
举报
0/150
提交
取消