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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
PHP strtotime函数详解
Dec 18 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
解析php开发中的中文编码问题
Aug 08 PHP
JS异常处理try..catch语句的作用和实例
May 05 PHP
php实现的Captcha验证码类实例
Sep 22 PHP
php json转换成数组形式代码分享
Nov 10 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
详解Laravel服务容器的绑定与解析
Nov 05 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
thinkphp中memcache的用法实例
2014/11/29 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
angularJS 入门基础
2015/02/09 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
python简单判断序列是否为空的方法
2015/06/30 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
python多线程使用方法实例详解
2019/12/30 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
django正续或者倒序查库实例
2020/05/19 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
文员自我评价怎么写
2013/09/19 职场文书
架构师岗位职责
2013/11/18 职场文书
《悯农》教学反思
2014/04/28 职场文书
保护环境的标语
2014/06/09 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis