查找php中两个数组的差异

查找php中两个数组的差异,php,Php,--$arr1-- Array ( [0] => Array ( [id] => 1 [Name] => AAA ) [1] => Array ( [id] => 6 [Name] => BBB )

--$arr1--

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);