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 高手之路(三)
Oct 09 PHP
PHP 如何向 MySQL 发送数据
Oct 09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
Yii框架函数简单用法分析
Sep 09 PHP
关于laravel 子查询 &amp; join的使用
Oct 16 PHP
一文搞懂php的垃圾回收机制
Jun 18 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数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
基于Jquery的温度计动画效果
2010/06/18 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
面试常见的js算法题
2017/03/23 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
原生JS实现天气预报
2020/06/16 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Java及python正则表达式详解
2017/12/27 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
大四自我鉴定范文
2013/10/06 职场文书
《称象》教学反思
2014/04/25 职场文书
工会主席事迹材料
2014/06/03 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
毕业设计致谢语
2015/05/14 职场文书
九年级语文教学反思
2016/03/03 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
如何利用golang运用mysql数据库
2022/03/13 Golang
CentOS MySql8 远程连接实战
2022/04/19 MySQL