2013-03-20 73 views
1

我有2個數組我想比較然後收集差異。如何比較2個數組並獲得差異

我只在每個數組中顯示2個元素。通常每個陣列包含超過80000個元件

數組1輸出($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) 

數組1輸出($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

如果數組是根據數據庫請求構建的,最好在DB查詢中處理這個問題 – 2013-03-20 13:14:45

+0

是的,通常我也會這樣做,但是不能對其他原因進行處理。這可以通過PHP來完成嗎? – Zaz 2013-03-20 13:16:29

+0

[迭代通過兩個數組並比較結果以顯示不匹配的結果]的可能重複(http://stackoverflow.com/questions/15413936/iterate-through-two-arrays-and-compare-results-to-display -res-do-not-ma) – jvnill 2013-03-20 15:50:29

回答

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

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

這沒有經過測試,並從我的頭頂。