PHP使用自定義方法實現(xiàn)數(shù)組合并示例
本文實例講述了PHP使用自定義方法實現(xiàn)數(shù)組合并。分享給大家供大家參考,具體如下:
在PHP中提供了強大的數(shù)組功能,對于數(shù)組的合并也提供了兩個方法:array_merge 和 array_merge_recursive
但對于我們千變?nèi)f化的業(yè)務來說這些內(nèi)置的方法并不完全能滿足我們的要求
如我現(xiàn)在就遇到了數(shù)組合并這方面的問題,要求是這樣的:
有兩個二維數(shù)組,這兩個數(shù)組大部分的健名是相同的,但有些健名可能并不存在于另一個數(shù)組中,現(xiàn)在需要我做的是將第二個數(shù)組中所有健值復制到第一個數(shù)組中(條件是:兩個數(shù)組某個健名的值是相同的情況下)
顯然內(nèi)置的兩個方法都不能滿足要求(兩個方法都只是將第二個數(shù)組中的健值復制到第一個對應的健上)
$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只是將每個第二個數(shù)組的值復制到第一個數(shù)組上而已,顯然數(shù)組一favorite.name被數(shù)組二code給覆蓋了,而array_merge_recursive不會覆蓋掉相同的健名但一旦兩個數(shù)組健名相同則它會創(chuàng)建一個新數(shù)組并將兩個數(shù)組中值添加到新數(shù)組中
以下是我自定義的實現(xiàn)方法:
/**
* @Author: HTL
* @Description: 根據(jù)指定的健名將$ar2中的所有健值復制到$ar1對應的健值中
* @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進行循環(huá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)中不會進行處理,因為$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();
運行結(jié)果如下圖所示:

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP數(shù)學運算技巧總結(jié)》、《php正則表達式用法總結(jié)》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- PHP將二維數(shù)組某一個字段相同的數(shù)組合并起來的方法
- php二維數(shù)組合并及去重復的方法
- php常用數(shù)組array函數(shù)實例總結(jié)【賦值,拆分,合并,計算,添加,刪除,查詢,判斷,排序】
- php通過array_merge()函數(shù)合并兩個數(shù)組的方法
- php中有關(guān)合并某一字段鍵值相同的數(shù)組合并的改進
- php合并數(shù)組中相同元素的方法
- php數(shù)組合并array_merge()函數(shù)使用注意事項
- php數(shù)組合并的二種方法
- PHP將兩個關(guān)聯(lián)數(shù)組合并函數(shù)提高函數(shù)效率
- php數(shù)組實現(xiàn)根據(jù)某個鍵值將相同鍵值合并生成新二維數(shù)組的方法
相關(guān)文章
js+php實現(xiàn)靜態(tài)頁面實時調(diào)用用戶登陸狀態(tài)的方法
這篇文章主要介紹了js+php實現(xiàn)靜態(tài)頁面實時調(diào)用用戶登陸狀態(tài)的方法,采用在靜態(tài)頁面中使用js調(diào)用php頁面從而實現(xiàn)用戶登錄狀態(tài)的實時調(diào)用功能,需要的朋友可以參考下2015-01-01
php中session_unset與session_destroy的區(qū)別分析
關(guān)于session_unset()和session_destroy()的函數(shù)使用進行介紹。學習php的朋友可以參考下。2011-06-06
PHP+sqlite數(shù)據(jù)庫操作示例(創(chuàng)建/打開/插入/檢索)
這篇文章主要介紹了PHP+sqlite數(shù)據(jù)庫操作的方法,簡單分析了sqlite數(shù)據(jù)庫的功能及相關(guān)操作技巧,包括創(chuàng)建,打開,插入,檢索及錯誤提示等,需要的朋友可以參考下2016-05-05
深入理解PHP中的static和yield關(guān)鍵字
這篇文章主要給大家介紹了關(guān)于PHP中static和yield關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用php具有一定的參考學習價值,文章需要的朋友們下面隨著小編來一起學習學習吧。2017-09-09

