PHP使用自定义方法实现数组合并示例


Posted in PHP onJuly 07, 2016

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
example2.php
Oct 09 PHP
关于php循环跳出的问题
Jul 01 PHP
php中explode的负数limit用法分析
Feb 27 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
PHP命名空间简单用法示例
Dec 28 PHP
PHP常用字符串函数用法实例总结
Jun 04 PHP
PHP记录和读取JSON格式日志文件
Jul 07 #PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 #PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 #PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 #PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 #PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 #PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 #PHP
You might like
PHP 读取文件的正确方法
2009/04/29 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
你必须知道的Javascript知识点之&quot;字面量和对应类型&quot;说明介绍
2013/04/23 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Python读取stdin方法实例
2019/05/24 Python
python实现图片上添加图片
2019/11/26 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
品管员岗位职责
2013/11/10 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
艺术教育实施方案
2014/05/03 职场文书
单位承诺书格式
2014/05/21 职场文书
机电系毕业生求职信
2014/07/11 职场文书
内科护士节演讲稿
2014/09/11 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
工作推荐信模板
2015/03/25 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
用JS创建一个录屏功能
2021/11/11 Javascript
GO中sync包自由控制并发示例详解
2022/08/05 Golang