一個相當簡單的問題。有什麼區別:array_merge和array + array有什麼區別?
$merged = array_merge($array1, $array2);
和
$merged = $array1 + $array2;
?
一個相當簡單的問題。有什麼區別:array_merge和array + array有什麼區別?
$merged = array_merge($array1, $array2);
和
$merged = $array1 + $array2;
?
的區別是:
的+
運算符采用兩個陣列的結合,而array_merge
函數採用聯合BUT的重複鍵被覆蓋)。
那麼,這兩者之間有什麼區別:[array_merge](http://codepad.org/6QdQh908),[加號](http://codepad.org/mu0aF3tN)(儘管我必須切換數組) ? – 2011-12-06 20:13:58
對於初學者來說,這裏有一個警告詞,兩種情況下的操作結果都是** null **,如果任何一個數組是** null **。有些人可能並不關心這個假設,因爲它是一個聯合操作,如果其中一個是** null **,結果將是正確的(非空)數組。但是,如果其中一個數組是空數組,則這種情況也適用。所以,作爲一個好習慣,我認爲,我們應該將輸入數組初始化爲空數組。你們說什麼? – 2012-07-13 06:58:16
如果有重複的密鑰,「參加工會」將永遠不會放棄其中的一個。不同之處在於哪一個。 – alexis 2016-03-11 09:19:48
array_merge()
導致在輸入數組中找到的所有數字鍵所得到的陣列中重建索引。工會運營商+
不會導致重新索引。
我相信array_merge
改寫複製non_numeric鍵,在$array1 + $array2
沒有。
這裏有一個簡單的說明測試:
$ar1 = [
0 => '1-0',
'a' => '1-a',
'b' => '1-b'
];
$ar2 = [
0 => '2-0',
1 => '2-1',
'b' => '2-b',
'c' => '2-c'
];
print_r($ar1+$ar2);
print_r(array_merge($ar1,$ar2));
與結果:
Array
(
[0] => 1-0
[a] => 1-a
[b] => 1-b
[1] => 2-1
[c] => 2-c
)
Array
(
[0] => 1-0
[a] => 1-a
[b] => 2-b
[1] => 2-0
[2] => 2-1
[c] => 2-c
)
注意,重複非數字鍵使用UNION運算符,但使用後一個會第一時間值array_merge。
對於數字鍵,第一個值將與工會操作者使用,而所有的值將與array_merge使用,只是重建索引。
我一般使用關聯數組聯合運營商和array_merge的數字。當然,你可以使用array_merge來進行關聯,只是後面的值會覆蓋前面的值。
+符號僅從開始發生數組鍵。
array_merge需要從最後發生陣列密鑰的值。
實施例:
$first = ['a'=>'one',
'b'=>'two',
'c'=>'three'];
$second = ['a'=>'fourth',
'b'=>'fifth',
'c'=>'sixth',
'3'=>'number three'];
$merged = $first + $second;
echo "<pre> plus sign merge\n";
var_dump($merged);
$merged = array_merge($first,$second);
echo "\n array_merge function merge\n";
var_dump($merged);
此輸出:
加符號合併
陣列(4){
[ 「一」] =>
串(3)「一個「
[」b「] =>
string(3)」two「
[ 「c」 的] =>
串(5)的 「三」
[3] =>
串(12) 「數字3」
}array_merge功能合併
陣列(4){
[ 「一」] =>
串(6) 「第四」
[ 「b」 的] =>
串(5) 「十五」
[ 「c」 的] =>
串(5) 「第六」
[0] =>
串(12) 「數字3」
}
有趣在此要注意的是,array_merge
actally 擦除的' 3'索引,即使它是一個字符串,因爲它是一個數字。
所以請小心合併array_merge
與數字索引數組。他們可能會丟失鑰匙。如果它們對你來說很重要,那麼在它們前面加一個字符串。
所以不是'3' => 'three'
使用類似'_3' => 'three'
「*即使它是一個字符串,因爲它是一個數字*」值得+1 :-) – 2016-07-09 11:06:05
請另一個區別注意:工會(+)將不會覆蓋與空值非空值(考慮相同的密鑰),而array_merge將:
$a = array('foo' => 'bar');
$b = array('foo' => ''); // or false or 0
print_r($a+$b);
print_r(array_merge($a, $b);
輸出:
另一個例子(數組沒有明確的鍵,它對於很明顯如何操作+
和array_merge
工作,但是當看到「明顯」的事情更簡單;))
$a = array('apple');
$b = array('orange', 'lemon');
echo '$a + $b = '; print_r($a + $b);
echo 'array_merge($a, $b) = '; print_r(array_merge($a, $b));
會給:
$a + $b = Array
(
[0] => apple
[1] => lemon
)
array_merge($a, $b) = Array
(
[0] => apple
[1] => orange
[2] => lemon
)
無法對答案發表評論,所以我會再寫一。
@ZalemCitizen根本就是錯誤的,工會(+)將覆蓋非空值與空的:
$a = array('foo' => 'bar');
$b = array('foo' => null);
var_dump($b+$a);
var_dump(array_merge($a, $b));
輸出:
array(1) {
["foo"]=>
NULL
}
array(1) {
["foo"]=>
NULL
}
記住數組的順序。
可能重複的[+運營商的數組在PHP?](http://stackoverflow.com/questions/2140090/operator-for-array-in-php) – Gordon 2011-03-22 16:06:15
可能戈登,錯過了,由於標題不是在其中有array_merge。 – 2011-03-22 16:08:58
是的,可以。 NP。 – Gordon 2011-03-22 16:19:14