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 smarty模版引擎中的缓存应用
Dec 02 PHP
php 冒泡排序 交换排序法
May 10 PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 PHP
php使用curl访问https示例分享
Jan 17 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
php版微信发红包接口用法示例
Sep 23 PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 PHP
mongodb和php的用法详解
Mar 25 PHP
Yii框架的布局文件实例分析
Sep 04 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
自己前几天写的无限分类类
2007/02/14 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
python实现自动发送邮件
2018/06/20 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Python函数装饰器实现方法详解
2018/12/22 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
接口可以包含哪些成员
2012/09/30 面试题
师范生自我鉴定
2014/03/20 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
电影红河谷观后感
2015/06/11 职场文书