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
Zend framework处理一个http请求的流程分析
Feb 08 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
PHP中执行cmd命令的方法
Oct 11 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP通过API获取手机号码归属地
May 28 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
php插入mysql数据返回id的方法
May 31 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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引用传值实例详解学习
2013/11/06 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
Three.js快速入门教程
2016/09/09 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
react PropTypes校验传递的值操作示例
2020/04/28 Javascript
sqlalchemy对象转dict的示例
2014/04/22 Python
Python FTP操作类代码分享
2014/05/13 Python
python列表操作实例
2015/01/14 Python
python正则表达式的使用
2017/06/12 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
大学生简历中个人的自我评价
2013/10/06 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
火锅店创业计划书范文
2014/02/02 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
职称评定个人总结
2015/03/05 职场文书
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android