array merge和陣列直接相加的區別

2021-07-16 03:40:38 字數 1690 閱讀 4181

今天發現php的陣列居然可以直接相加,之前都是用array_merge進行陣列的連線操作。

但是試驗了一番發現差別還是很大的。

首先是以數字為索引的陣列, array_merge會將兩個陣列按照先後順序組成乙個新的陣列

$array1 = array("a", "b", "c");

$array2 = array("d", "e", "f");

// 輸出array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )

var_dump(array_merge($array1, $array2));

// 輸出array ( [0] => d [1] => e [2] => f [3] => a [4] => b [5] => c )

var_dump(array_merge($array2, $array1));

但是如果兩個數字索引的陣列直接相加的話,兩個陣列並不會完全保留,而是儲存前者

$array1 = array("a", "b", "c");

$array2 = array("d", "e", "f");

// 輸出array ( [0] => a [1] => b [2] => c )

print_r($array1 + $array2);

那麼當兩個相加的陣列大小不一致呢?

$array1 = array("a", "b", "c");

$array2 = array("d", "e", "f");

$array3 = array("g", "h");

// 輸出array ( [0] => d [1] => e [2] => f )

print_r($array2 + $array3);

// 輸出array ( [0] => g [1] => h [2] => f )

print_r($array3 + $array2);

可以見到兩個以數字為索引的陣列相加後的大小是取決於最大的陣列,當第乙個陣列的大小不夠時會從後面的陣列對應位置取值補充

當陣列是以字串為索引時,array_merge對於相同的key會進行替換,後者取代前者,對於沒有重複的key會按順序進行拼接

$array1 = array("a" => 1, "b" => 1, "d" => 1);

$array2 = array("a" => 2, "b" => 2, "c" => 2);

// 輸出array ( [a] => 2 [b] => 2 [d] => 1 [c] => 2 )

print_r(array_merge($array1, $array2));

如果是相加的話,規則和array_merge類似,但對於相同的key的值是以前者為準

$array1 = array("a" => 1, "b" => 1, "d" => 1);

$array2 = array("a" => 2, "b" => 2, "c" => 2);

// array ( [a] => 1 [b] => 1 [d] => 1 [c] => 2 )

print_r($array1 + $array2);

PHP陣列直接相加和array merge的區別

array merge是很常用的陣列合併函式,但是兩個陣列直接相加對開發也是很有幫助的,兩者之間有什麼差別,這裡記錄一下 首先是以數字為索引 array merge會將兩個陣列按照先後順序組成乙個新的陣列 array1 a b c array2 d e f print r array merge a...

php陣列函式 array merge

array merge 函式把兩個或多個陣列合併為乙個陣列。如果鍵名有重複,該鍵的鍵值為最後乙個鍵名對應的值。如果陣列是數字 索引,則鍵名會以連續方式重新索引。注 如果僅僅向array merge 函式輸入乙個陣列,且鍵名是整數,則該函 數將返回帶有整數鍵名的新陣列,其鍵名以0開始進行索引。arra...

php 和array merge合併陣列

array merge函式會用第二個引數表示的陣列中同名鍵的值覆蓋第乙個引數表示的陣列中同名鍵的值,數值鍵不會覆蓋,並且會重新索引。只會將第二個陣列中不存在於第乙個陣列中的鍵的鍵值對加入第乙個陣列,不管是數值鍵還是其他鍵,而數值鍵不會重新索引。arr1 3 q 2 w a e b r arr 2 t...