php如何實(shí)現(xiàn)數(shù)組合并但鍵值相同的數(shù)組不互相覆蓋?文末有驚喜哦~~~
一、PHP數(shù)組基礎(chǔ)
(一)、key
1. key只能為integer或string,可同時存在;
2. 包含合法整型值的字符串key會被轉(zhuǎn)化為整型存儲,如:‘7’的key會被轉(zhuǎn)化為7存儲;
3. 布爾值key會被轉(zhuǎn)化為整型存儲,true會被轉(zhuǎn)化為1存儲,false會被轉(zhuǎn)化為0存儲;
4. null會被轉(zhuǎn)化為空串(‘’)存儲;
5. 如果多個key值被轉(zhuǎn)化為相同的值,則只使用最后一個,前面的被覆蓋,如:一個數(shù)組中依次定義了‘1’、true、1的key,則最后只會存儲key為1的value,之前的值都會被覆蓋掉;
6. 如果未指定key,則會被自動設(shè)定為之前用過的最大的整型key+1,最小為0;
(二)、value
可以為PHP任意類型(字符串、整型、浮點(diǎn)型、布爾型、對象、數(shù)組、null、資源類型);
(三)、其他類型轉(zhuǎn)化為數(shù)組類型
1. integer、string、float、boolean、resource類型轉(zhuǎn)化為數(shù)組類型時,會被自動分配key為0,value為其原值;
2. object類型轉(zhuǎn)化為數(shù)組類型時,成員變量名會作為數(shù)組key,私有屬性的key會加上類名前綴,保護(hù)屬性的key會加上‘*’前綴,成員變量的值作為value;
3. null會被轉(zhuǎn)化為空數(shù)組;
(四)、foreach
1. 兩種形式,foreach(arr as $key => $value)與foreach(arr as $value),其中value是值傳遞,使用&value是引用傳遞;
2. 遍歷依賴數(shù)組內(nèi)部指針;
3. 遍歷結(jié)束后,value會被保留(在遍歷外能夠獲取到最后value的值),為防止在多次foreach時出現(xiàn)問題,可以在一次foreach后unset($value)或使用不同的變量;
二、三種數(shù)組合并方式
目前工作中接觸到的PHP數(shù)組合并方式主要有三種:
1、+操作符;
2、array_merge();
3、array_merge_recursive();
它們的區(qū)別主要體現(xiàn)在對于相關(guān)鍵名(數(shù)字鍵名、字符串鍵名)的處理方式,下面以兩個實(shí)際例子來提現(xiàn):
(一)、相同數(shù)字鍵名
<?php $arrFirst = [ ? ?111 => "first", ? ?222 => "first", ? ?"first" //會指定默認(rèn)的數(shù)字鍵223 ]; $arrSecond = [ ? ?111 => "second", ? ?333 => "second", ? ?"second" //會指定默認(rèn)的數(shù)字鍵334 ]; //對于重復(fù)的數(shù)字鍵,+操作后,前面數(shù)組的鍵值會覆蓋后面的,保留之前數(shù)字鍵 var_dump("array + result:", $arrFirst + $arrSecond); //對于重復(fù)的數(shù)字鍵,array_merge后,重排數(shù)字鍵(字符串鍵不變),不會覆蓋 var_dump("array_merge result:", array_merge($arrFirst, $arrSecond)); //對于重復(fù)的數(shù)字鍵,array_merge_recursive后,重排數(shù)字鍵(字符串鍵不變),不會覆蓋 var_dump("array_merge_recursive result:", array_merge_recursive($arrFirst, $arrSecond)); ?>
運(yùn)行結(jié)果:

編輯
(二)、相同字符串鍵
<?php $arrFirst = [ ? ?"first_key" ?=> 1, ? ?"second_key" => 1, ? ?"third_key" ?=> 1, ]; $arrSecond = [ ? ?"first_key" ?=> 2, ? ?"second_key" => 2, ? ?"fourth_key" => 2, ]; //對于重復(fù)的字符串鍵,+操作后,前面數(shù)組的鍵值會覆蓋后面的 var_dump("array + result:", $arrFirst + $arrSecond); //對于重復(fù)的字符串鍵,array_merge后,后面數(shù)組的鍵值會覆蓋前面的 var_dump("array_merge result:", array_merge($arrFirst, $arrSecond)); //對于重復(fù)的字符串鍵,array_merge_recursive后,相同鍵名的鍵值會被合并到同一數(shù)組中(會遞歸) var_dump("array_merge_recursive result:", array_merge_recursive($arrFirst, $arrSecond)); ?>
運(yùn)行結(jié)果:

這里有一份?JetBrains 的激活方法,有需要的來取了!
鏈接:https://pan.baidu.com/s/1jxvnKgTsTbkVmjcPGeTm0g
提取碼:2cg8