有没有什么快速的方法可以在多维数组中找到键值对的所有子数组?我不能说数组会有多深。
简单的数组示例:
$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")
);
我猜这个函数必须是递归的,才能深入到最深的层次。
发布于 2009-06-19 18:55:11
那么SPL版本如何呢?它将为您省去一些输入:
// 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);
}
}
最棒的是,通过使用RecursiveDirectoryIterator而不是RecursiveArrayIterator,基本上相同的代码将遍历目录。SPL是roxor。
SPL唯一令人沮丧的地方是它在网络上的文档质量很差。但有几本PHP书籍详细介绍了一些有用的细节,特别是Pro PHP;您可能也可以在谷歌上搜索更多信息。
发布于 2013-02-20 12:52:48
<?php
$arr = array(0 => array("id"=>1,"name"=>"cat 1"),
1 => array("id"=>2,"name"=>"cat 2"),
2 => array("id"=>3,"name"=>"cat 1")
);
$arr = array_filter($arr, function($ar) {
return ($ar['name'] == 'cat 1');
//return ($ar['name'] == 'cat 1' AND $ar['id'] == '3');// you can add multiple conditions
});
echo "<pre>";
print_r($arr);
?>
发布于 2010-06-28 20:21:16
if (isset($array[$key]) && $array[$key] == $value)
对快速版本的一个小改进。
https://stackoverflow.com/questions/1019076
复制相似问题