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 相关文章推荐
用PHP和ACCESS写聊天室(一)
Oct 09 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
调试一段PHP程序时遇到的三个问题
Jan 17 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
PHP内核探索之变量
Dec 22 PHP
php 如何获取文件的后缀名
Jun 05 PHP
实例讲解PHP中使用命名空间
Jan 27 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
文件上传程序的全部源码
2006/10/09 PHP
php 正则表达式小结
2009/08/31 PHP
php魔术变量用法实例详解
2014/11/13 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
Javascript中replace()小结
2015/09/30 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
jQuery属性选择器用法实例分析
2019/06/28 jQuery
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
python简单猜数游戏实例
2015/07/09 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python 修改列表中的元素方法
2018/06/26 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
基于树莓派的语音对话机器人
2019/06/17 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
如何撰写一封出色的求职信
2014/04/27 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
市场营销专业求职信
2014/06/17 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
离职报告格式
2014/11/04 职场文书
2014年采购工作总结
2014/11/20 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
生日赠语
2015/06/23 职场文书
2015暑假社会调查报告
2015/07/13 职场文书