重新认识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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
smtp邮件发送一例
Oct 09 PHP
rephactor 优秀的PHP的重构工具
Jun 09 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
php时间计算相关问题小结
May 09 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 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
PHP的面试题集
2006/11/19 PHP
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
JS 事件绑定函数代码
2010/04/28 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
vue组件实例解析
2017/01/10 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
angular多语言配置详解
2019/05/16 Javascript
javascript实现计算器功能
2020/03/30 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
维修工先进事迹
2014/05/29 职场文书
汇报材料怎么写
2014/12/30 职场文书
语文教师个人工作总结
2015/02/06 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL
python中pymysql包操作数据库方法
2022/04/19 Python