[英]Dynamic multiple search filter in Multidimensional Array php
首先要归功于阵列搜索功能的制定者。 我需要使它过滤数组中的多个键。 当前功能仅限于每次使用搜索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);
}
}
如果我使用search($ arr,'name','cat 1'),它将返回:
array(0 => array(id=>1,name=>"cat 1"),
1 => array(id=>3,name=>"cat 1")
);
但是,如果我希望它按'name'=>'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代码运行。 请帮忙!
这不是最优化的解决方案,但可以使用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;
});
}
这是工作演示 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.