目前工做中接觸到的PHP數組合並方式主要有三種:
一、+操做符
二、array_merge()
三、array_merge_recursive()php
它們的區別主要體如今對於相同鍵名(數字鍵名、字符串鍵名)的處理方式,下面本文將以兩個實際例子來體現~數組
<?php $arrFirst = [ "first_key" => 1, "second_key" => 1, "third_key" => 1, ]; $arrSecond = [ "first_key" => 2, "second_key" => 2, "fourth_key" => 2, ]; //對於重複的字符串鍵,array_merge後,後面數組的鍵值會覆蓋前面的 echo sprintf("\narray_merge result:\n%s", print_r(array_merge($arrFirst, $arrSecond), true)); //對於重複的字符串鍵,+操做後,前面數組的鍵值會覆蓋後面的 echo sprintf("\narray + result:\n%s", print_r($arrFirst + $arrSecond, true)); //對於重複的字符串鍵,array_merge_recursive後,相同鍵名的鍵值會被合併到同一數組中(會遞歸) echo sprintf("\narray_merge_recursive result:\n%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));
運行結果:spa
<?php $arrFirst = [ 111 => "first", 222 => "first", "first" //會指定默認的數字鍵223 ]; $arrSecond = [ 111 => "second", 333 => "second", "second" //會指定默認的數字鍵334 ]; //對於重複的數字鍵,+操做後,前面數組的鍵值會覆蓋後面的,保留以前數字鍵 echo sprintf("\narray + result:\n%s", print_r($arrFirst + $arrSecond, true)); //對於重複的數字鍵,array_merge後,重排數字鍵,不會覆蓋 echo sprintf("\narray_merge result:\n%s", print_r(array_merge($arrFirst, $arrSecond), true)); //對於重複的數字鍵,array_merge_recursive後,重排數字鍵,不會覆蓋 echo sprintf("\narray_merge_recursive result:\n%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));
運行結果:指針
1、KEY
一、Key只能爲Integer或String,可同時存在
二、包含合法整型值的字符串Key會被轉化爲整型存儲,如:'6'的Key會被轉化爲6存儲
三、布爾值Key會被轉化爲整型存儲,true會被轉化爲1存儲,false會被轉化爲0存儲
四、Null會被轉化爲空串存儲
五、若是多個Key值被轉化後爲相同的值,則只使用最後一個,前面的被覆蓋,如:一個數組中依次定義了'1'、true、1的key,則最後只會存儲key爲1的value,以前的值都被覆蓋
六、若是未指定Key,則會被自動設定爲以前用過的最大的整型Key+1,最小爲02、VALUE
一、能夠爲PHP任意類型(字符串、整形、浮點型、布爾型、對象、數組、NULL、資源類型)code3、其餘類型轉化爲數組類型
一、Integer、String、Float、Boolean、Resource類型轉化爲數組類型時,會被自動分配Key爲0,Value爲其原值
二、Object類型轉化爲數組類型時,成員變量名會做爲數組Key,私有屬性的Key會加上類名前綴,保護屬性的Key會加上'*'前綴
三、Null會被轉化爲空數組對象4、foreach
一、兩種形式,foreach($arr as $key => $value)與foreach($arr as
$value),其中$value是值傳遞,使用&$value是引用傳遞
二、遍歷依賴數組內部指針
三、遍歷結束後,$value會被保留,爲防止在屢次foreach時出現問題,能夠在一次foreach後unset($value)或使用不一樣的變量blog