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 相关文章推荐
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 PHP
php 随机生成10位字符代码
Mar 26 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
php数组去除空值函数分享
Feb 02 PHP
Yii CGridView用法实例详解
Jul 12 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
PHP函数rtrim()使用中的怪异现象分析
Feb 24 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 zend 相对路径问题
2009/01/12 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
PHP微信支付开发实例
2016/06/22 PHP
php表单处理操作
2017/11/16 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
struct与class的区别
2014/02/03 面试题
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
学生个人总结范文
2015/02/15 职场文书
清明节寄语2015
2015/03/23 职场文书
电影红河谷观后感
2015/06/11 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP