亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP使用自定義方法實(shí)現(xiàn)數(shù)組合并示例

 更新時(shí)間:2016年07月07日 09:57:59   作者:HTL  
這篇文章主要介紹了PHP使用自定義方法實(shí)現(xiàn)數(shù)組合并示例,涉及php針對(duì)數(shù)組的遍歷、判斷、轉(zhuǎn)換等相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(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ì)有所幫助。

相關(guān)文章

最新評(píng)論