《PHP實(shí)例:PHP使用自定義方法實(shí)現(xiàn)數(shù)組合并示例》要點(diǎn):
本文介紹了PHP實(shí)例:PHP使用自定義方法實(shí)現(xiàn)數(shù)組合并示例,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
本文實(shí)例講述了PHP使用自定義方法實(shí)現(xiàn)數(shù)組合并.分享給大家供大家參考,具體如下:PHP實(shí)戰(zhàn)
在PHP中提供了強(qiáng)大的數(shù)組功能,對(duì)于數(shù)組的合并也提供了兩個(gè)方法:array_merge 和 array_merge_recursivePHP實(shí)戰(zhàn)
但對(duì)于我們千變?nèi)f化的業(yè)務(wù)來說這些內(nèi)置的方法并不完全能滿足我們的要求PHP實(shí)戰(zhàn)
如我現(xiàn)在就遇到了數(shù)組合并這方面的問題,要求是這樣的:PHP實(shí)戰(zhàn)
有兩個(gè)二維數(shù)組,這兩個(gè)數(shù)組大部分的健名是相同的,但有些健名可能并不存在于另一個(gè)數(shù)組中,現(xiàn)在需要我做的是將第二個(gè)數(shù)組中所有健值復(fù)制到第一個(gè)數(shù)組中(條件是:兩個(gè)數(shù)組某個(gè)健名的值是相同的情況下)PHP實(shí)戰(zhàn)
顯然內(nèi)置的兩個(gè)方法都不能滿足要求(兩個(gè)方法都只是將第二個(gè)數(shù)組中的健值復(fù)制到第一個(gè)對(duì)應(yīng)的健上)PHP實(shí)戰(zhàn)
$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ù)組中PHP實(shí)戰(zhàn)
以下是我自定義的實(shí)現(xiàn)方法:PHP實(shí)戰(zhà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é)果如下圖所示:PHP實(shí)戰(zhàn)
PHP實(shí)戰(zhàn)
更多關(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ù)庫操作技巧匯總》PHP實(shí)戰(zhàn)
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助.PHP實(shí)戰(zhàn)
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/5884.html