2013-03-04 35 views
2

我有2個數組嵌套到來自外部源的4或5個級別(所以,我不能,也不想手動更改結構,如果可能的話)。我已經簡化了下面的問題,但請記住,結構不在我的控制之下,所以我需要一個通用的解決方案。如何合併2個數組與數字指標,並在PHP中取代值?

$x = array (
    'one' => 
    array (
    'two' => 2, 
    'three' => 
    array (
     0 => 3, 
    ), 
), 
); 

$y = array (
    'one' => 
    array (
    'three' => 
    array (
     0 => 3, 
    ), 
    'four' => 4, 
    'five' => 5, 
), 
    'six' => 6 
); 

我想合併這些並獲得:

array (
    'one' => 
    array (
    'two' => 2, 
    'three' => 
    array (
     0 => 3, 
    ), 
    'four' => 4, 
    'five' => 5, 
), 
    'six' => 6 
) 

我已經嘗試了所有的下面,沒有給我確切上面:

var_dump($x+$y); 
var_dump(array_merge($x,$y)); 
var_dump(array_merge_recursive($x,$y)); 

var_dump($y+$x); 
var_dump(array_merge($y,$x)); 
var_dump(array_merge_recursive($y,$x)); 

所以,我想我需要一些自定義代碼來進行合併。它會是什麼?保持通用和簡單。

回答

1
function array_merge_recursive_unique($array1, $array2) { 
    if (empty($array1)) return $array2; //optimize the base case 

    foreach ($array2 as $key => $value) { 
    if (is_array($value) && is_array(@$array1[$key])) { 
     $value = array_merge_recursive_unique($array1[$key], $value); 
    } 
    $array1[$key] = $value; 
    } 
    return $array1; 
} 

請在發佈之前先搜索。這是一個重複的merge-2-arrays-with-no-duplicated-keys