重新认识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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
PHP页面中文乱码分析
Oct 29 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
Jun 26 PHP
php学习笔记之基础知识
Nov 08 PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
Dec 08 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 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 getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python 获取et和excel的版本号
2009/04/09 Python
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python sort、sorted高级排序技巧
2014/11/21 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
Django URL传递参数的方法总结
2016/08/28 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Python 导入文件过程图解
2019/10/15 Python
python字符串的拼接方法总结
2019/11/18 Python
python带参数打包exe及调用方式
2019/12/21 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
局域网定义和特性
2016/01/23 面试题
高中生毕业学习总结的自我评价
2013/11/14 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
2015年母亲节寄语
2015/03/23 职场文书
离婚起诉书范本
2015/05/18 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
解析Java异步之call future
2021/06/14 Java/Android
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android