php合併陣列的幾種方式

郭玉朝發表於2017-11-13

+號方式

介紹

規則:當兩個陣列的鍵名是數字鍵名或者字串鍵名可以直接 +,$c = $a + $b,在$a後追加($b$a中不存在的鍵名)鍵名和值。

注意:

不覆蓋,只是追加不存在的鍵名和對應的值。
鍵名不重新索引。
無論是全部數字鍵名還是混合,都只是追加鍵名和值,如果鍵名相同則不進行追加,即把最先出現的值作為最終結果返回。

程式碼

這裡寫圖片描述

array_merge

說明

規則:array_merge() 將一個或多個陣列的單元合併起來,一個陣列中的值附加在前一個陣列的後面。返回作為結果的陣列。 如果輸入的陣列中有相同的字串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果陣列包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。 如果只給了一個陣列並且該陣列是數字索引的,則鍵名會以連續方式重新索引。 

程式碼

這裡寫圖片描述

說明

array_merge_recursive() 將一個或多個陣列的單元合併起來,一個陣列中的值附加在前一個陣列的後面。返回作為結果的陣列。 

如果輸入的陣列中有相同的字串鍵名,則這些值會被合併到一個陣列中去,這將遞迴下去,因此如果一個值本身是一個陣列,本函式將按照相應的條目把它合併為另一個陣列。

然而,如果陣列具有相同的陣列鍵名,後一個值將不會覆蓋原來的值,而是附加到後面。 

注意:規則跟array_merge基本相同,只是在處理相同字元鍵名的時候,採用遞迴追加。

這裡寫圖片描述

總結

對比array_merge和+以及array_merge_recursive結果的”color”的值我們可以看出:
1.對於相同的字串索引,
array_merge則會用後面的值覆蓋前面出現的值;
+會用前面出現過的值覆蓋後面相同的key;
array_merge_recursive則會把相同的索引放到一個陣列裡面,增加陣列的維度;
2.對於相同的數字索引,
array_merge則會給重複的值重建索引(索引值從0開始);
+仍然是用前面出現過的值覆蓋後面的值;
array_merge_recursive和array_merge的處理方法一樣。



但是這只是把陣列進行合併,我做合併的同時還想要去重應該怎麼辦呢,那就用到了另外兩個函式array_flip()函式和array_keys() 函式

迭代器

參考我寫的php-spl迭代器中的陣列組合。

相關文章