array_merge函式會用第二個引數表示的陣列中同名鍵的值覆蓋第乙個引數表示的陣列中同名鍵的值,數值鍵不會覆蓋,並且會重新索引。
+只會將第二個陣列中不存在於第乙個陣列中的鍵的鍵值對加入第乙個陣列,不管是數值鍵還是其他鍵,而數值鍵不會重新索引。
$arr1=[
3=>
'q',
2=>
'w',
'a'=>
'e',
'b'=>
'r',
'arr'
=>[2
=>
't',
'c'=>
'y']];
$arr2=[
3=>
'z',
4=>
'x',
'a'=>
'c',
'c'=>
'v',
'arr'
=>[2
=>
'b',
'd'=>
'n']];
print_r
(array_merge
($arr1
,$arr2))
;print_r
($arr1
+$arr2
);
執行它:
字串形式的數字和整型資料的相等性:
if(1
=='1')if
(2=='02'
)
array_merge函式會將字串形式的數值鍵當做數值,在新陣列中會被重新索引:
$arr1=[
3=>
'q',
4=>
'w']
;$arr2=[
'3'=>
'z',
'04'
=>
'x']
;print_r
(array_merge
($arr1
,$arr2))
;
執行它:
可見對於字串04,array_merge函式並沒有將其當做數值鍵重新索引。
而+合併陣列時對於字串和數字的表現:
$arr1=[
3=>
'q',
4=>
'w']
;$arr2=[
'3'=>
'z',
'04'
=>
'x']
;print_r
($arr1
+$arr2
);
執行它:
可見對於+合併陣列時,字串04被當做了與數值4不同的鍵,這說明+合併陣列時,並不是使用==或===來判斷鍵是否相等。
總結:在普通的條件判斷中,字串01與數值1是相等(==)的,而在兩種方式的陣列合併時,字串01和數值1都是不同的鍵,且字串01都不被當做數值鍵,因此array_merge函式不會將字串01重新索引。
array_merge_recursive函式會將兩個陣列中的同名鍵的值放到乙個陣列中(數值鍵會重新索引),如果兩個同名鍵的值都是陣列,則這兩個子陣列會合併,且這兩個子陣列中的數值鍵也不會重新索引,第二個陣列中的數值鍵會在第乙個陣列中最大數值鍵的基礎上自增數值鍵,使用此函式合併上例兩個陣列:
如果兩個子陣列合併時其中還含陣列,則會繼續遞迴合併,且內層陣列中的數值鍵也不會重新索引:
$arr1=[
'arr'
=>[2
=>[1
,2],
'c'=>[5
,6]]
];$arr2=[
'arr'
=>[0
=>[9
,10],
2=>[3
,4],
'c'=>[7
,8]]
];print_r
(array_merge_recursive
($arr1
,$arr2))
;
執行它:
array_merge函式單獨用於乙個陣列時可用於重新索引數值鍵,即使數值鍵是以字串形式給出的:
$arr=[
4=>
'a',
7=>
'b',
'5'=>
'c',
'06'
=>
'd']
;print_r
(array_merge
($arr))
;
執行它:
php中陣列 和array merge區別
主要區別在與兩個或多個陣列在合併時,出現相同的鍵名時處理方式不一樣 一 當鍵名為數字時,array merge不會覆蓋原來的值,會拋棄後面的值 created by phpstorm.user lzc date 2017 3 18 time 10 02 a 1,2,3 b 4,5,6 var dum...
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...