2012-09-21 149 views
1

如何基於兩個數組(PHP)創建一個新的多維數組,以便數組合並刪除任何重複項。例如:如何組合2個多維數組並刪除重複項

第一陣列:

Array 
(
    [0] => Array 
    (
     [id] => 0001 
     [name] => sample name 1 
    ) 

    [1] => Array 
    (
     [id] => 0002 
     [name] => sample name 2 
    ) 
    [3] => Array 
    (
     [id] => 0003 
     [name] => sample name 3 
    ) 
) 

第二個數組:

Array 
(
    [0] => Array 
    (
     [id] => 0002 
     [name] => sample name 2 
    ) 
    [1] => Array 
    (
     [id] => 11323 
     [name] => blah blah 
    ) 
) 

所以新的數組是這樣的:

Array 
(
    [0] => Array 
    (
     [id] => 0001 
     [name] => sample name 1 
    ) 

    [1] => Array 
    (
     [id] => 0002 
     [name] => sample name 2 
    ) 
    [3] => Array 
    (
     [id] => 0003 
     [name] => sample name 3 
    ) 
    [4] => Array 
    (
     [id] => 11323 
     [name] => blah blah 
    ) 
) 

回答

1

你可以做到這一點

$array1 = Array(
     0 => Array("id" => "0001","name" => "sample name 1"), 
     1 => Array("id" => "0002","name" => "sample name 2"), 
     3 => Array("id" => "0003","name" => "sample name 3")); 

$array2 = Array(
     0 => Array("id" => "0002","name" => "sample name 2"), 
     1 => Array("id" => "11323","name" => "blah blah")); 

$output = array_map("unserialize", array_unique(array_map("serialize", array_merge($array1,$array2)))); 

var_dump($output); 

輸出

array 
    0 => 
    array 
     'id' => string '0001' (length=4) 
     'name' => string 'sample name 1' (length=13) 
    1 => 
    array 
     'id' => string '0002' (length=4) 
     'name' => string 'sample name 2' (length=13) 
    2 => 
    array 
     'id' => string '0003' (length=4) 
     'name' => string 'sample name 3' (length=13) 
    4 => 
    array 
     'id' => string '11323' (length=5) 
     'name' => string 'blah blah' (length=9) 
+0

的最佳解決方案 - 完美地工作!還有一個問題,如何排序新數組以便我可以通過id或name對其進行排序,最好的解決方案是什麼?我在這裏是新的,所以讓我知道如果我應該把這作爲一個單獨的問題。再次感謝!! – user1637621

0

可以序列每個子陣列,使用array_unique,然後反序列化:

$arr = array_merge($arr1,$arr2); 
foreach($arr as &$a) { 
    $a = serialize($a); 
} 
$arr = array_values(array_unique($arr)); 
foreach($arr as &$a) { 
    $a = unserialize($a); 
}