如何比较2个数组并获得差异

时间:2013-03-20 13:09:52

标签: php arrays

我想要比较2个阵列然后收集差异。

我只在每个数组中显示2个元素。通常每个数组包含超过80000个元素

Array1输出($Memcooltransactions

    Array ( 
[0] => Array ( [zipcode] => 0000 [city] => 23593 Vellinge, Sverige [numberofuniqmembers] => 11 [numberofuniqspisesteder] => 0 
[1] => Array ( [zipcode] => 4212 [city] => CPH, Denmark [numberofuniqmembers] => 2 [numberofuniqspisesteder] => 0 )

Array1输出($result

    Array ( 
[0] => Array ( [zipcode] => 0460 [city] => Nordskali, Færøerne [numberofuniqmembers] => 1 [numberofuniqspisesteder] => 0 
[1] => Array ( [zipcode] => 4212 [city] => CPH, Denmark [numberofuniqmembers] => 2 [numberofuniqspisesteder] => 0 )

期望的输出:

 [0] => Array ( [zipcode] => 0000 [city] => 23593 Vellinge, Sverige [numberofuniqmembers] => 11 [numberofuniqspisesteder] => 0 
[1] => Array ( [zipcode] => 0460 [city] => Nordskali, Færøerne [numberofuniqmembers] => 1 [numberofuniqspisesteder] => 0 

这是我尝试的方式:

$result2 = array_diff_assoc($Memcooltransactions, $result1);

但是我得到了这个输出:($result2

 Array (
    [0] => Array ( [zipcode] => 0000 [city] => 23593 Vellinge, Sverige [numberofuniqmembers] => 11 [numberofuniqspisesteder] => 0 
    [1] => Array ( [zipcode] => 4212 [city] => CPH, Denmark [numberofuniqmembers] => 2 [numberofuniqspisesteder] => 0
    [2] => Array ( [zipcode] => 0460 [city] => Nordskali, Færøerne [numberofuniqmembers] => 1 [numberofuniqspisesteder] => 0 
   )

为什么会这样?

2 个答案:

答案 0 :(得分:0)

使用php的array_dif()函数。它比较了2个数组并输出了不匹配的东西。它只是单向比较,所以你将数组2与数组1进行比较,然后它从数组1中吐出差异。 如果你想比较1到2,那么你也必须以相反的方式运行它。这将为您留下2个输出数组。

然后你可以将array_merge()和2一起给你一个主数组。这就是你要找的东西。

价: http://php.net/manual/en/function.array-diff.php http://www.php.net/manual/en/function.array-merge.php

答案 1 :(得分:0)

虽然你已经有很好的提示如何解决这个问题,但还有另外一个。

    $array_a; // array 1
    $array_b; // array 2
    $array_c = array(); // result array

    function($array_a , $array_b) {
      foreach($array_a as $keya => $valuea) {

        foreach(array_b as $keyb => $valueb) {

                  if($valuea['city'] = $valueb['city']){
                        array_push($array_c, $array_b[$key]);
                  }
        }
      }
   }

这不是经过测试,而是从我的头脑中进行测试。