我有一个小问题。我必须比较这样的数组:
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函数可以得到这个吗?
答案 0 :(得分:2)
要以最通用的方式使用它,可以使用array_filter,array_diff和array_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
是您的愿望输出