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 相关文章推荐
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
php5.3 废弃函数小结
May 16 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
PHP修改session_id示例代码
Jan 08 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
PHP遍历目录并返回统计目录大小
Jun 09 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
thinkPHP多语言切换设置方法详解
Nov 11 PHP
php实现的读取CSV文件函数示例
Feb 07 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
Dec 10 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调用新浪短链接API的方法
2014/11/08 PHP
PHP整合PayPal支付
2015/06/11 PHP
隐性调用php程序的方法
2015/06/13 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
Python创建模块及模块导入的方法
2015/05/27 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
django中静态文件配置static的方法
2018/05/20 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
师生聚会感言
2014/01/26 职场文书
物控部经理职务说明书
2014/02/25 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
合同纠纷调解书
2015/05/20 职场文书
宇宙与人观后感
2015/06/05 职场文书
2016年教代会开幕词
2016/03/04 职场文书