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 相关文章推荐
搜索引擎技术核心揭密
Oct 09 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
PHP $_FILES函数详解
Mar 09 PHP
PHP遍历二维数组的代码
Apr 22 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
php函数重载的替代方法--伪重载详解
May 08 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 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基础知识:函数基础知识
2006/12/13 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
Python 文件数据读写的具体实现
2020/01/24 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
优秀纪检干部材料
2014/08/27 职场文书
医药销售自我评价200字
2014/09/11 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
2014年车间工作总结
2014/11/21 职场文书
离婚协议书样本
2015/01/26 职场文书
老公保证书怎么写
2015/02/26 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
自我推荐信格式模板
2015/03/24 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL