重新认识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 相关文章推荐
mysql建立外键
Nov 25 PHP
php截取utf-8中文字符串乱码的解决方法
Mar 29 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
php实现mysql封装类示例
May 07 PHP
php实例分享之mysql数据备份
May 19 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 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
ASP知识讲座四
2006/10/09 PHP
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP 危险函数解释 分析
2009/04/22 PHP
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
JS中数组重排序方法
2016/11/11 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
使用Scrapy爬取动态数据
2018/10/21 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
python 读取修改pcap包的例子
2019/07/23 Python
python3 re返回形式总结
2020/11/20 Python
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
毕业生教师求职信
2013/10/20 职场文书
同学聚会欢迎辞
2014/01/14 职场文书
个人培训总结
2015/03/05 职场文书
会议主持词结束语
2015/07/03 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang