溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP數(shù)組合并

發(fā)布時(shí)間:2020-04-06 06:52:14 來源:網(wǎng)絡(luò) 閱讀:1134 作者:ttlxihuan 欄目:web開發(fā)

很多時(shí)候我們要把多個(gè)數(shù)組進(jìn)行合并,在php函數(shù)庫(kù)中合并函數(shù)有:

直接合并:array_merge,array_merge_recursive;

間接合并:array_map,array_filter等可以使用匿名函數(shù)的方法

還有一種合并方式,那就是 + 這個(gè)實(shí)際就是一種運(yùn)算,但在很多時(shí)候它能完成直接合并不能完成的數(shù)組合并。

在這里不對(duì)間接合并作說明,因?yàn)殚g接數(shù)據(jù)已經(jīng)類似foreach循環(huán)處理。

PHP數(shù)組合并

array_merge_recursive 函數(shù)是針對(duì)多個(gè)數(shù)組合并但不能丟失每一個(gè)元素

PHP數(shù)組合并

array_merge 函數(shù)是針對(duì)多個(gè)數(shù)組合并只要后面有重復(fù)的就覆蓋前面的。


array_merge_recursive,array_merge這兩個(gè)函數(shù)在合并數(shù)字下標(biāo)或索引下標(biāo)時(shí)是不會(huì)覆蓋,而是重寫原標(biāo)下為默認(rèn)索引下標(biāo)按每個(gè)數(shù)組元素先后順序追加到合并新數(shù)組中去,所以當(dāng)待合并數(shù)組中需要覆蓋數(shù)字下標(biāo)的元素時(shí)這兩個(gè)函數(shù)就不能直接合并了,要么給把下標(biāo)修改成不純數(shù)字,要么使用循環(huán)語(yǔ)句,或者使用 +

+ 運(yùn)算在處理數(shù)組時(shí),必須保證兩邊的運(yùn)算值都是數(shù)組,注意:+前面的數(shù)組會(huì)覆蓋后面數(shù)組相同鍵名的值,這個(gè)與函數(shù)調(diào)用正好相反。

例如:

PHP數(shù)組合并

$arr與$arr1是兩個(gè)混合數(shù)組,結(jié)構(gòu)相同,只是數(shù)據(jù)有些差別,通過上面不同方式合并結(jié)果完全不相同,合并后主要看點(diǎn)是數(shù)組中下標(biāo)為test2與123的合并結(jié)果變化。


函數(shù) array_merge 合并存在覆蓋元素,但對(duì)于索引元素只會(huì)累加而不是覆蓋,那它合并后的結(jié)果是:

PHP數(shù)組合并


結(jié)論:使用array_merge函數(shù)對(duì)數(shù)組進(jìn)行合并,系統(tǒng)只會(huì)對(duì)數(shù)組的第一層下標(biāo)進(jìn)行判斷,數(shù)字下標(biāo)的元素會(huì)全部保留,并且在不影響元素索引位置重置下標(biāo),標(biāo)下的順序是從第一個(gè)數(shù)組開始然后累加后面的數(shù)組,字符串類下標(biāo)系統(tǒng)只保留最后出現(xiàn)下標(biāo)與元素,不會(huì)遞歸到元素的內(nèi)層數(shù)組中,直接覆蓋前面的元素。

函數(shù) array_merge_recursive 合并存在覆蓋元素,但對(duì)于索引元素只會(huì)累加而不是覆蓋,那它合并后的結(jié)果是:

PHP數(shù)組合并

結(jié)論:使用array_merge_recursive對(duì)數(shù)組進(jìn)行合并,系統(tǒng)只對(duì)第一層數(shù)字下標(biāo)的元素進(jìn)行重置為索引下標(biāo)并保留原來的位置,字符串類下標(biāo)元素是不會(huì)覆蓋,而是遞歸到內(nèi)層,遞歸中有數(shù)字下標(biāo)的停止當(dāng)前元素遞歸并重置下標(biāo),下標(biāo)是以當(dāng)前遞歸層內(nèi)第一個(gè)數(shù)字下標(biāo)為起點(diǎn)值進(jìn)行累加,并不全從0開始累加,遞歸層內(nèi)最內(nèi)層的字符串下標(biāo)出現(xiàn)相同時(shí),會(huì)在最小層內(nèi)創(chuàng)建一個(gè)數(shù)組并按重復(fù)的先后順序添加到這個(gè)數(shù)組中去,數(shù)組以默認(rèn)索引下標(biāo)進(jìn)行添加

使用$arr + $arr1 運(yùn)算方式是不會(huì)重置下標(biāo),所以相同下標(biāo)的元素都會(huì)以+左邊的數(shù)組為主去覆蓋+右邊的元素,那運(yùn)算后的結(jié)果是:

PHP數(shù)組合并

結(jié)論:使用+運(yùn)算合并數(shù)組,系統(tǒng)只對(duì)運(yùn)算數(shù)組的第一層元素進(jìn)行嚴(yán)格的下標(biāo)合并覆蓋,運(yùn)算前面的數(shù)組會(huì)覆蓋后面所有相同下標(biāo)的元素,并且不會(huì)遞歸到內(nèi)層,所有數(shù)字下標(biāo)與字符串下標(biāo)都將進(jìn)行覆蓋操作,并且不會(huì)修改下標(biāo)。


大部分開發(fā)中都會(huì)使用函數(shù)或循環(huán)合并數(shù)組,其它很多時(shí)候使用+會(huì)更方便,總結(jié)下這三種方式的合并場(chǎng)景:


array_merge應(yīng)用在只對(duì)字符串下標(biāo)覆蓋(后面出現(xiàn)的覆蓋前面出現(xiàn)的元素),數(shù)字下標(biāo)的全部累加且不關(guān)注下標(biāo)是否修改或要求重置默認(rèn)數(shù)字下標(biāo),所有的合并只在第一層元素與對(duì)應(yīng)的下標(biāo)下完成,并不遞歸到內(nèi)層元素。


array_merge_recursive應(yīng)用在不覆蓋任何元素,相同字符串下標(biāo)的元素會(huì)遞歸到內(nèi)層并在最小合并層時(shí)創(chuàng)建一個(gè)數(shù)組將重復(fù)的元素追加到這個(gè)數(shù)組中,數(shù)字下標(biāo)的停止當(dāng)前元素遞歸合并全部累加到當(dāng)前層(如果是第一層會(huì)重置數(shù)字下標(biāo)為默認(rèn)索引下標(biāo),第二層及更深層不會(huì)修改第一個(gè)元素的下標(biāo)值,只會(huì)重置第二個(gè)及以后的所有當(dāng)層數(shù)字下標(biāo)以第一個(gè)下標(biāo)為起始下標(biāo)值累加)且不關(guān)注下標(biāo)是否修改或要求重置默認(rèn)數(shù)字下標(biāo)。


+ 應(yīng)用在嚴(yán)格按下標(biāo)(不區(qū)分下標(biāo)是否與數(shù)字或字符串)覆蓋,或者下標(biāo)不相同時(shí)累加且不重置下標(biāo)。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI