比较两个数组以获取特定数据

时间:2018-09-27 08:36:49

标签: php arrays

我有一个小问题。我必须比较这样的数组:

array(2) {
 [0]=>
  array(4) {
["persons"]=>
int(1)
["date"]=>
string(21) "2018-10-01 2018-11-14"
["type"]=>
string(7) "for one"
["sun"]=>
string(3) "yes"
 }
[1]=>
 array(4) {
["persons"]=>
int(2)
["date"]=>
string(21) "2018-10-01 2018-10-14"
["type"]=>
string(7) "for two"
["sun"]=>
string(3) "yes"
}}

现在我有一些选择,例如,选择用户:

array(2) {
["type"]=>
string(7) "for two"
["sun"]=>
string(3) "yes"

}

现在我很难比较这两个数组。我只需要来自第一个数组的记录,这些记录是不同的并与第二个数组的搜索变量匹配。在这种情况下,我需要这样的结果:

array(1) {

[0]=>
array(2) {
["persons"]=>
int(2)
["date"]=>
string(21) "2018-10-01 2018-10-14"
}}

我尝试了array_diff和array_intersect,但这不是我需要的结果。我也在foreach循环中尝试过,但无法修复以达到目标。有一些现成的php函数可以得到这个吗?

1 个答案:

答案 0 :(得分:2)

要以最通用的方式使用它,可以使用array_filterarray_diffarray_map

考虑以下示例:

$a = array("a" => "aaa", "b" => "bbb", "c" => "ddd");
$b = array("a" => "aaa", "b" => "bbb", "c" => "ccc");
$arr = array($a,$b); // this is your base array

$find = array("b" => "bbb", "c" => "ccc"); // this is as your options (what you want to find)

现在您可以这样做:

$barr = array_filter($arr, function($elem) use ($find) {
        return count(array_intersect($find, $elem)) == count($find);
}); // $barr contains only the sub-arrays that contains the option you wanted


$carr = array_map(function($elem) use ($find) {
        return array_diff($elem, $find);
},$barr); // $carr contain only the field that are not in the option array

现在$carr是您的愿望输出