繁体   English   中英

多维数组php中的动态多重搜索过滤器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM