PHP使用自訂方法實現數組合并樣本_php技巧

來源:互聯網
上載者:User

本文執行個體講述了PHP使用自訂方法實現數組合并。分享給大家供大家參考,具體如下:

在PHP中提供了強大的數組功能,對於數組的合并也提供了兩個方法:array_merge 和 array_merge_recursive

但對於我們千變萬化的業務來說這些內建的方法並不完全能滿足我們的要求

如我現在就遇到了數組合并這方面的問題,要求是這樣的:

有兩個二維數組,這兩個數組大部分的健名是相同的,但有些健名可能並不存在於另一個數組中,現在需要我做的是將第二個數組中所有健值複製到第一個數組中(條件是:兩個數組某個健名的值是相同的情況下)

顯然內建的兩個方法都不能滿足要求(兩個方法都只是將第二個數組中的健值複製到第一個對應的健上)

$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只是將每個第二個數組的值複製到第一個數組上而已,顯然數組一favorite.name被數組二code給覆蓋了,而array_merge_recursive不會覆蓋掉相同的健名但一旦兩個數組健名相同則它會建立一個新數組並將兩個數組中值添加到新數組中

以下是我自訂的實現方法:

/** * @Author:   HTL * @Description: 根據指定的健名將$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進行迴圈,因為如果數組中的索引不是連續的則使用for可能無法正確的完成迴圈  如 $a =      Array(      1 => Array("id" => 1 )      ,8 => Array("id" => 2 )      ,4 => Array("id" => 4 )     );  該數組數為3所以只能找到[1],而[8][4]在迴圈中不會進行處理,因為$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();

運行結果如下圖所示:

更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP數組(Array)操作技巧大全》、《php排序演算法總結》、《PHP常用遍曆演算法與技巧總結》、《PHP資料結構與演算法教程》、《php程式設計演算法總結》、《PHP數學運算技巧總結》、《phpRegex用法總結》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》及《php常見資料庫操作技巧匯總》

希望本文所述對大家PHP程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.