Multidimensional Array php中的动态多重搜索过滤器

时间:2017-09-20 01:07:12

标签: php arrays multidimensional-array

首先归功于阵列搜索功能的制造商。我需要的是让它过滤数组中的多个键。当前功能仅限于搜索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代码运行。请帮忙!

1 个答案:

答案 0 :(得分:0)

不是最优化的解决方案,但您可以将array_filterarray_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