很多時候我們要把多個數組進行合并,在php函數庫中合并函數有:
創新互聯建站是一家朝氣蓬勃的網站建設公司。公司專注于為企業提供信息化建設解決方案。從事網站開發,網站制作,網站設計,網站模板,微信公眾號開發,軟件開發,小程序設計,十年建站對水電改造等多個方面,擁有多年的網站推廣經驗。直接合并:array_merge,array_merge_recursive;
間接合并:array_map,array_filter等可以使用匿名函數的方法
還有一種合并方式,那就是 + 這個實際就是一種運算,但在很多時候它能完成直接合并不能完成的數組合并。
在這里不對間接合并作說明,因為間接數據已經類似foreach循環處理。
array_merge_recursive 函數是針對多個數組合并但不能丟失每一個元素
array_merge 函數是針對多個數組合并只要后面有重復的就覆蓋前面的。
array_merge_recursive,array_merge這兩個函數在合并數字下標或索引下標時是不會覆蓋,而是重寫原標下為默認索引下標按每個數組元素先后順序追加到合并新數組中去,所以當待合并數組中需要覆蓋數字下標的元素時這兩個函數就不能直接合并了,要么給把下標修改成不純數字,要么使用循環語句,或者使用 +
+ 運算在處理數組時,必須保證兩邊的運算值都是數組,注意:+前面的數組會覆蓋后面數組相同鍵名的值,這個與函數調用正好相反。
例如:
$arr與$arr1是兩個混合數組,結構相同,只是數據有些差別,通過上面不同方式合并結果完全不相同,合并后主要看點是數組中下標為test2與123的合并結果變化。
函數 array_merge 合并存在覆蓋元素,但對于索引元素只會累加而不是覆蓋,那它合并后的結果是:
結論:使用array_merge函數對數組進行合并,系統只會對數組的第一層下標進行判斷,數字下標的元素會全部保留,并且在不影響元素索引位置重置下標,標下的順序是從第一個數組開始然后累加后面的數組,字符串類下標系統只保留最后出現下標與元素,不會遞歸到元素的內層數組中,直接覆蓋前面的元素。
函數 array_merge_recursive 合并存在覆蓋元素,但對于索引元素只會累加而不是覆蓋,那它合并后的結果是:
結論:使用array_merge_recursive對數組進行合并,系統只對第一層數字下標的元素進行重置為索引下標并保留原來的位置,字符串類下標元素是不會覆蓋,而是遞歸到內層,遞歸中有數字下標的停止當前元素遞歸并重置下標,下標是以當前遞歸層內第一個數字下標為起點值進行累加,并不全從0開始累加,遞歸層內最內層的字符串下標出現相同時,會在最小層內創建一個數組并按重復的先后順序添加到這個數組中去,數組以默認索引下標進行添加
使用$arr + $arr1 運算方式是不會重置下標,所以相同下標的元素都會以+左邊的數組為主去覆蓋+右邊的元素,那運算后的結果是:
結論:使用+運算合并數組,系統只對運算數組的第一層元素進行嚴格的下標合并覆蓋,運算前面的數組會覆蓋后面所有相同下標的元素,并且不會遞歸到內層,所有數字下標與字符串下標都將進行覆蓋操作,并且不會修改下標。
大部分開發中都會使用函數或循環合并數組,其它很多時候使用+會更方便,總結下這三種方式的合并場景:
array_merge :應用在只對字符串下標覆蓋(后面出現的覆蓋前面出現的元素),數字下標的全部累加且不關注下標是否修改或要求重置默認數字下標,所有的合并只在第一層元素與對應的下標下完成,并不遞歸到內層元素。
array_merge_recursive :應用在不覆蓋任何元素,相同字符串下標的元素會遞歸到內層并在最小合并層時創建一個數組將重復的元素追加到這個數組中,數字下標的停止當前元素遞歸合并全部累加到當前層(如果是第一層會重置數字下標為默認索引下標,第二層及更深層不會修改第一個元素的下標值,只會重置第二個及以后的所有當層數字下標以第一個下標為起始下標值累加)且不關注下標是否修改或要求重置默認數字下標。
+:應用在嚴格按下標(不區分下標是否與數字或字符串)覆蓋,或者下標不相同時累加且不重置下標。
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享文章:PHP數組合并-創新互聯
轉載來于:http://vcdvsql.cn/article42/ejhec.html
成都網站建設公司_創新互聯,為您提供移動網站建設、網站制作、靜態網站、企業建站、營銷型網站建設、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯