2012-12-28 16 views
0

我使用array_merge函數來合併兩個數組。 在大多數情況下,它工作正常如何防止重新編號assoc_merge的結果?

$x = array_merge(array('a' => 'x', 'b' => 'x'), array('b' => 'y', 'c' => 'y')); 
var_dump($x); 

// array(3) { ["a"]=> string(1) "x" ["b"]=> string(1) "y" ["c"]=> string(1) "y" } 

但對於數字情況下,它會返回意想不到的結果

指標
$x = array_merge(array('1' => 'x', '2' => 'x'), array('2' => 'y', '3' => 'y')); 
var_dump($x); 

// array(4) { [0]=> string(1) "x" [1]=> string(1) "x" [2]=> string(1) "y" [3]=> string(1) "y" } 

如何防止重編? 有沒有辦法通過基礎PHP函數合併兩個數組而不重新編號數字索引?

回答

1

manual

如果輸入的數組中有相同的字符串鍵,那麼該密鑰的後來值 將覆蓋前一個。但是,如果數組鍵 包含數字鍵,則後面的值不會覆蓋原始值 值,但會被追加。

所以,改爲使用array_replace

+0

謝謝,這是我需要的。 –

1

如果你想從第二個數組的數組元素添加到第一陣列,而不是覆蓋從第一數組中的元素,而不是重新索引,使用+陣列聯合運營:

<?php 
$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a'); 
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b'); 
$result = $array1 + $array2; 
var_dump($result); 
?> 

的關鍵從第一個數組將被保存。如果在兩個數組中都存在數組鍵,則將使用第一個數組中的元素,並忽略來自第二個數組的匹配鍵元素。

array(5) { 
[0]=> 
string(6) "zero_a" 
[2]=> 
string(5) "two_a" 
[3]=> 
string(7) "three_a" 
[1]=> 
string(5) "one_b" 
[4]=> 
string(6) "four_b" 
} 

Taken from here

+0

謝謝,它更可以接受的行爲。 –

1

您可以使用array_replace()爲:

$x = array_replace(array('1' => 'x', '2' => 'x'), array('2' => 'y', '3' => 'y')); 
var_dump($x); 

輸出:

array(3) { 
    [1]=> 
    string(1) "x" 
    [2]=> 
    string(1) "y" 
    [3]=> 
    string(1) "y" 
}