2014-04-04 26 views
0

我有兩個關聯數組。問題,而使用array_merge函數合併兩個數組

$Array1 = array(
'abc'=> 'abc', 
'def'=> 'def' 
); 

$Array2 = array(
'123'=> '123', 
'456'=> '456' 
); 

我正在使用array_merge合併它們。

$Array3 = array_merge($Array1, $Array2); 

現在$ Array3的值是這樣的。

Array 
(
    [abc] => abc 
    [def] => def 
    [0] => 123 
    [1] => 456 
) 

它看起來非常奇怪,直到我讀的PHP手冊,它說用數字鍵輸入數組中值將遞增鍵從零結果數組在開始重新編號。 array_merge manual

我的任務如何合併兩個數組而不丟失他們的聯想密鑰。 這兩個陣列都可以有共同的KEYS,我也不想丟失我的信息。 :(

回答

1

通過+

$Array1 = array(
'abc'=> 'abc', 
'def'=> 'def' 
); 

$Array2 = array(
'123'=> '123', 
'456'=> '456' 
); 
var_dump($Array1 + $Array2); 

這將保存指數,但要注意,如果相同的密鑰在第一個數組存在,這將不會覆蓋第一陣列的價值

如果你想要的。重寫工作,再有就是這個array_replace功能:

var_dump(array_replace($Array1, $Array2)); 
+0

兩個陣列CAN H大家常見的KEYS,我也不想泄露我的信息。 :(我更新了這個問題 –

+0

@RiteshChandora那麼你期望的結果是什麼,''common_key'=> array('value1','value2')'? – xdazz

+0

這兩個數組都是多維的。 –

1

對於作爲sociative陣列,使用

$result = $Array1 + $Array2; 

- 但是注意到,對於數字鍵,這也將重新索引:

$Array1 = array(
'abc', 
'def'=> 'def' 
); 

$Array2 = array(
'123', 
'456' 
); 
var_dump($Array1 + $Array2); 
//array(3) { [0]=> string(3) "abc" ["def"]=> string(3) "def" [1]=> string(3) "456" } 

如果你在你的陣列相同的鍵,你可以使用:

$result = array_reduce(array_keys($Array1), function($c, $x) use ($Array1) 
{ 
    $c[$x] = isset($c[$x]) 
     ?array_merge((array)$c[$x], [$Array1[$x]]) 
     :$Array1[$x]; 
    return $c; 
}, $Array2); 
+0

這兩個數組都可以擁有通用的KEYS,我也不想丟失我的信息。:(我更新了這個問題。 –

+0

嗯,我已經更新了(所以在這種情況下,你將擁有這些鍵值的數組) –

1

試試這個代碼:)它的工作

function my_merge($array1,$array2) 
    { 
     foreach($array2 as $key => $value) 
     { 
     $array1[$key] = $value; 
     } 
     return $array1; 
    } 

    $Array1 = array(
      'abc'=> 'abc', 
      'def'=> 'def' 
    ); 

    $Array2 = array(
      '123'=> '123', 
      '456'=> '456' 
    ); 

    $Array3 = my_merge($Array1, $Array2);