重新认识php array_merge函数


Posted in PHP onAugust 31, 2014

重新认识php array_merge函数

今天因一个Bug重新审视了下array_merge()这个函数。

定义:array_merge — 合并一个或多个数组

规范:array array_merge(array $array1 [, array $...])

说明:

1. 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。

2. 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。   

3. 如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

这个函数在手册中有详尽示例,用途也很广且实用。

今天遇到的一个问题是手册中有警告的,只是此前没注意到,导致了一个致命的错误。如下:

PHP >= 5.0 版本,array_merge() 只接受array类型的参数。不过可以用强制转换来合并其它类型。

对于是foreach等代码产生的数组变量要注意了,要么初始化该变量为空数组,要么就在合并时做个强制转换。不然,会有大苦头吃。因此,保持一个初始化变量的习惯也是个好事。

PHP中合并数组分成两种情况

1、如果这两个数组中有相同的字符串键名:

<?php
 
 $book1 = array('linux'=>'linux服务器配置与管理','php'=>'PHP程序设计');
 $book2 = array('linux'=>'服务器配置与管理','jsp'=>'PHP'); 
 
 $result = array_merge($book1,$book2);
 print_r($result);
?>

输出为:

Array ( [linux] => 服务器配置与管理 [php] => PHP程序设计 [jsp] => PHP )

 
说明,后者将替换前者。但如果使用的是array_merge_recursive()则可保留,并作一个子数组存在。如:
 

<?php
 
 $book1 = array('linux'=>'linux服务器配置与管理','php'=>'PHP程序设计');
 $book2 = array('linux'=>'服务器配置与管理','jsp'=>'PHP'); 
 
 $result = array_merge_recursive($book1,$book2);
 print_r($result);
?>

输出为:

Array ( [linux] => Array ( [0] => linux服务器配置与管理 [1] => 服务器配置与管理 ) [php] => PHP程序设计 [jsp] => PHP )

 
2、如果这两个数组中有相同的数值键名:

<?php
 
 $book1 = array('linux服务器配置与管理','PHP程序设计');
 $book2 = array('服务器配置与管理','PHP'); 
 
 $result = array_merge($book1,$book2);
 print_r($result);
?>

结果是:

Array ( [0] => linux服务器配置与管理 [1] => PHP程序设计 [2] => 服务器配置与管理 [3] => PHP )

 
这时,如果数组中包含相同的数字键名,则后面的不会覆盖前面的值,而是后面的键值按顺序依次增加,附在后边。明白了吗,^_^

PHP 相关文章推荐
php zend解密软件绿色版测试可用
Apr 14 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
如何设置mysql允许外网访问
Jun 04 PHP
PHP编程基本语法快速入门手册
Jan 07 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 #PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 #PHP
PHP实现数组递归转义的方法
Aug 28 #PHP
PHP之autoload运行机制实例分析
Aug 28 #PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 #PHP
PHP反射机制用法实例
Aug 28 #PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 #PHP
You might like
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
PHP array 的加法操作代码
2010/07/24 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
Django接收自定义http header过程详解
2019/08/23 Python
python求绝对值的三种方法小结
2019/12/04 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
管道维修工岗位职责
2013/12/27 职场文书
护理专业自荐信范文
2014/02/26 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
党小组评议意见
2015/06/02 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
全新239军机修复记
2022/04/05 无线电
canvas 中如何实现物体的框选
2022/08/05 Javascript