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代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
Oct 03 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
php日历制作代码分享
Jan 20 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
Laravel 5 学习笔记
Mar 06 PHP
php bootstrap实现简单登录
Mar 08 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
E路文章系统PHP
2006/12/11 PHP
使用php重新实现PHP脚本引擎内置函数
2007/03/06 PHP
PHP实现Socket服务器的代码
2008/04/03 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
详解Vue打包优化之code spliting
2018/04/09 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
函数指针的定义是什么
2016/08/14 面试题
拓展策划方案
2014/06/03 职场文书
新文化运动的口号
2014/06/21 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
排球赛新闻稿
2015/07/17 职场文书
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android