首先归功于阵列搜索功能的制造商。我需要的是让它过滤数组中的多个键。当前功能仅限于搜索1键和每次使用的值。
$arr = array(0 => array(id=>1,name=>"cat 1"),
1 => array(id=>2,name=>"cat 2"),
2 => array(id=>3,name=>"cat 1")
);
以下是功能(对所有者的信用):
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);
}
}
如果我使用搜索($ arr,'名称',' cat 1'),它将返回:
array(0 => array(id=>1,name=>"cat 1"),
1 => array(id=>3,name=>"cat 1")
);
但是,如果我希望它按名称'过滤=> ' cat 1'并且' id' => 1,它只会返回:
array(0 => array(id=>1,name=>"cat 1")
);
但我需要接受动态过滤器参数中的函数,我将在不同的多维数组上使用它。任何帮助都将深表感谢。
编辑:
到目前为止我尝试了什么
public function search($array, $search)
{
$results = array();
foreach($search as $key => $value){
$condition[] = 'isset($subarray["'.$key.'"]) && $subarray["'.$key.'"] == "'.$value.'"';
}
$filter = implode($condition, ' && ');
foreach($array as $subarray){
if ($filter) {
$results[] = $subarray;
}
}
return $results;
}
但我无法将$ filter作为php代码运行。请帮忙!
答案 0 :(得分:0)
不是最优化的解决方案,但您可以将array_filter
与array_intersect_assoc
结合使用:
function search(array $array, array $search)
{
return array_filter($array, function ($item) use ($search) {
return array_intersect_assoc($search, $item) === $search;
});
}
这是working demo。