PHP使用自定義方法實(shí)現(xiàn)數(shù)組合并示例
本文實(shí)例講述了PHP使用自定義方法實(shí)現(xiàn)數(shù)組合并。分享給大家供大家參考,具體如下:
在PHP中提供了強(qiáng)大的數(shù)組功能,對(duì)于數(shù)組的合并也提供了兩個(gè)方法:array_merge 和 array_merge_recursive
但對(duì)于我們千變?nèi)f化的業(yè)務(wù)來說這些內(nèi)置的方法并不完全能滿足我們的要求
如我現(xiàn)在就遇到了數(shù)組合并這方面的問題,要求是這樣的:
有兩個(gè)二維數(shù)組,這兩個(gè)數(shù)組大部分的健名是相同的,但有些健名可能并不存在于另一個(gè)數(shù)組中,現(xiàn)在需要我做的是將第二個(gè)數(shù)組中所有健值復(fù)制到第一個(gè)數(shù)組中(條件是:兩個(gè)數(shù)組某個(gè)健名的值是相同的情況下)
顯然內(nèi)置的兩個(gè)方法都不能滿足要求(兩個(gè)方法都只是將第二個(gè)數(shù)組中的健值復(fù)制到第一個(gè)對(duì)應(yīng)的健上)
$ar1 = array("color"=> array("favorite"=>"red","name"=>"test")); $ar2 = array("color"=> array("favorite"=>"green","code"=>"code")); print_r (array_merge ($ar1, $ar2)); print_r(array_merge_recursive ($ar1, $ar2));
可以看到array_merge只是將每個(gè)第二個(gè)數(shù)組的值復(fù)制到第一個(gè)數(shù)組上而已,顯然數(shù)組一favorite.name被數(shù)組二code給覆蓋了,而array_merge_recursive不會(huì)覆蓋掉相同的健名但一旦兩個(gè)數(shù)組健名相同則它會(huì)創(chuàng)建一個(gè)新數(shù)組并將兩個(gè)數(shù)組中值添加到新數(shù)組中
以下是我自定義的實(shí)現(xiàn)方法:
/** * @Author: HTL * @Description: 根據(jù)指定的健名將$ar2中的所有健值復(fù)制到$ar1對(duì)應(yīng)的健值中 * @Return:$ar1 */ function array_more_merge($ar1,$ar2,$key_name){ if( !$ar1 || !is_array($ar1) || count($ar1)<=0 || !$ar2 || !is_array($ar2) || count($ar2)<=0 || !$key_name || strlen($key_name)<=0) { return $ar1; } /*不能使用for進(jìn)行循環(huán),因?yàn)槿绻麛?shù)組中的索引不是連續(xù)的則使用for可能無法正確的完成循環(huán) 如 $a = Array( 1 => Array("id" => 1 ) ,8 => Array("id" => 2 ) ,4 => Array("id" => 4 ) ); 該數(shù)組數(shù)為3所以只能找到[1],而[8][4]在循環(huán)中不會(huì)進(jìn)行處理,因?yàn)?i <=count($a)不成立<br> */ for ($i=0; $i <=count($a) ; $i++) { print_r($a[$i]); } foreach ($ar1 as $i=>$items) { foreach ($ar2 as $key=>$item) { if($ar2[$key][$key_name]==$ar1[$i][$key_name]){ $keys = array_keys($ar2[$key]); foreach ($keys as $name) { $ar1[$i][$name] = $ar2[$key][$name]; } } } } return $ar1; } $ar1 = '{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"2","id":"2","total_price":"10"},"4":{"cost":"4","id":"4","total_price":"20"}}'; $ar1 = json_decode($ar1,true); $ar2 = '{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"20","id":"2","total_price":"100"},"4":{"cost":"40","id":"4","total_price":"200"}}'; $ar2 = json_decode($ar2,true); echo "array_merge_recursive:"; print_r(array_merge_recursive($ar1,$ar2)); echo "array_merge:"; print_r(array_merge($ar1,$ar2)); echo "array_more_merge:"; print_r($this->array_more_merge($ar1,$ar2,"id")); die();
運(yùn)行結(jié)果如下圖所示:
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP將二維數(shù)組某一個(gè)字段相同的數(shù)組合并起來的方法
- php二維數(shù)組合并及去重復(fù)的方法
- php常用數(shù)組array函數(shù)實(shí)例總結(jié)【賦值,拆分,合并,計(jì)算,添加,刪除,查詢,判斷,排序】
- php通過array_merge()函數(shù)合并兩個(gè)數(shù)組的方法
- php中有關(guān)合并某一字段鍵值相同的數(shù)組合并的改進(jìn)
- php合并數(shù)組中相同元素的方法
- php數(shù)組合并array_merge()函數(shù)使用注意事項(xiàng)
- php數(shù)組合并的二種方法
- PHP將兩個(gè)關(guān)聯(lián)數(shù)組合并函數(shù)提高函數(shù)效率
- php數(shù)組實(shí)現(xiàn)根據(jù)某個(gè)鍵值將相同鍵值合并生成新二維數(shù)組的方法
相關(guān)文章
mysql數(shù)據(jù)庫(kù)差異比較的PHP代碼
這天遇見個(gè)需求:由于升級(jí)系統(tǒng) 這些系統(tǒng)從A庫(kù)升級(jí)到B庫(kù),但是不知道數(shù)據(jù)庫(kù)添加了哪些字段和增加了哪些表2012-02-02js+php實(shí)現(xiàn)靜態(tài)頁面實(shí)時(shí)調(diào)用用戶登陸狀態(tài)的方法
這篇文章主要介紹了js+php實(shí)現(xiàn)靜態(tài)頁面實(shí)時(shí)調(diào)用用戶登陸狀態(tài)的方法,采用在靜態(tài)頁面中使用js調(diào)用php頁面從而實(shí)現(xiàn)用戶登錄狀態(tài)的實(shí)時(shí)調(diào)用功能,需要的朋友可以參考下2015-01-01php中session_unset與session_destroy的區(qū)別分析
關(guān)于session_unset()和session_destroy()的函數(shù)使用進(jìn)行介紹。學(xué)習(xí)php的朋友可以參考下。2011-06-06PHP+sqlite數(shù)據(jù)庫(kù)操作示例(創(chuàng)建/打開/插入/檢索)
這篇文章主要介紹了PHP+sqlite數(shù)據(jù)庫(kù)操作的方法,簡(jiǎn)單分析了sqlite數(shù)據(jù)庫(kù)的功能及相關(guān)操作技巧,包括創(chuàng)建,打開,插入,檢索及錯(cuò)誤提示等,需要的朋友可以參考下2016-05-05深入理解PHP中的static和yield關(guān)鍵字
這篇文章主要給大家介紹了關(guān)于PHP中static和yield關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用php具有一定的參考學(xué)習(xí)價(jià)值,文章需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09