查找php中两个数组的差异
--$arr1--查找php中两个数组的差异,php,Php,--$arr1-- Array ( [0] => Array ( [id] => 1 [Name] => AAA ) [1] => Array ( [id] => 6 [Name] => BBB )
Array
(
[0] => Array
(
[id] => 1
[Name] => AAA
)
[1] => Array
(
[id] => 6
[Name] => BBB
)
)
--$arr2--
Array
(
[0] => Array
(
[id] => 1
[Name] => AAA
)
[1] => Array
(
[id] => 6
[Name] => BBB
)
[2] => Array
(
[id] => 46
[Name] => CCC
)
)
Array
(
[0] => Array
(
[id] => 46
[Name] => CCC
)
)
我希望最终结果如下。有人能帮我吗
--最终结果--
Array
(
[0] => Array
(
[id] => 1
[Name] => AAA
)
[1] => Array
(
[id] => 6
[Name] => BBB
)
[2] => Array
(
[id] => 46
[Name] => CCC
)
)
Array
(
[0] => Array
(
[id] => 46
[Name] => CCC
)
)
更新---
Array
(
[0] => Array
(
[id] => 1
[Name] => AAA
)
[1] => Array
(
[id] => 6
[Name] => BBB
)
[2] => Array
(
[id] => 46
[Name] => CCC
)
)
Array
(
[0] => Array
(
[id] => 46
[Name] => CCC
)
)
在这种情况下,array_diff($arr1,$arr2)的结果为空
如果需要更复杂的比较,还可以构建foreach循环,并使用如下方式:
函数比较项($a,$b){
返回$a['id']==b['id'];//比较条件示例
}
$result=array();
foreach($arr1作为$item){
foreach($arr2作为$key=>$it){
如果(!compareItems($item,$it)){
$result[]=$it;//构建新数组
取消设置($arr2[$key]);//或从原始数组中删除项
打破
}
}
}
然后,您可能希望以
$arr1
和$arr2
的相反顺序实现相同的功能。请看一下PHP内置函数。这将对您有所帮助:-)只需传递两个数组,并存储array_diff()返回的数组,该数组将包含两个数组之间的差异
当您使用多维数组时,请查看PHP网站上的以下评论:
编辑
仅仅为了好玩,您可以使用array_filter()而不是array_diff()——这意味着根本不需要序列化任何内容
$results = array_filter($arr2, function ($value) use($arr1) { return !in_array($value,$arr1); } );
var_dump($results);
最简单的方法是Mark Baker的解决方案,或者只编写自己的简单函数: 代码: 输出:
您可以使用array_udiff()解决此问题 或者,如果您不知道差异可能在哪个数组中,您可以尝试:
$res1 = array_udiff($arr1, $arr2, 'arr_comp');
$res2 = array_udiff($arr2, $arr1, 'arr_comp');
$result = array_merge($res1, $res2);
我使用了array_diff($arr1,$arr2);但是,结果是由“TheFrox”编写的emptyAs:(这会起作用,因为您使用的是多维数组)@Acubi,所以请尝试我添加的示例。PHP文档中写道:array_diff“此函数仅检查n维数组的一个维度”array_diff()上的注释中有示例多维数组版本的php文档页面计数器
$i
是不必要的<代码>$arrDif[]=$value代码>应该可以做到这一点;)您可以简化arr_comp函数,只测试“==”甚至测试其他参数。
function arr_comp($a, $b)
{
if ($a['id'] == $b['id'])
return 0;
else if ($a['id'] > $b['id'])
return 1;
else
return -1;
}
$result = array_udiff($arr2, $arr1, 'arr_comp');
$res1 = array_udiff($arr1, $arr2, 'arr_comp');
$res2 = array_udiff($arr2, $arr1, 'arr_comp');
$result = array_merge($res1, $res2);