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 date函数参数详解
Nov 27 PHP
MySQL数据源表结构图示
Jun 05 PHP
简单的PHP留言本实例代码
May 09 PHP
php stream_get_meta_data返回值
Sep 29 PHP
百度实时推送api接口应用示例
Oct 21 PHP
PHP的拦截器实例分析
Nov 03 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
PHP中SSO Cookie登录分析和实现
Nov 06 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
PHP的JSON封装、转变及输出操作示例
Sep 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
css图片自适应大小
2007/11/28 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
JS设计模式之单例模式(一)
2017/09/29 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python实现多行注释的另类方法
2014/08/22 Python
Python中__call__用法实例
2014/08/29 Python
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python hash每次调用结果不同的原因
2019/11/21 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
小学母亲节活动总结
2015/02/10 职场文书
校车安全管理责任书
2015/05/11 职场文书