重新认识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
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
php中定时计划任务的实现原理
Jan 08 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
php的debug相关函数用法示例
Jul 11 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
php pdo连接数据库操作示例
Nov 18 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
详解python的几种标准输出重定向方式
2016/08/15 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python如何统计代码运行的时长
2019/07/24 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
2014年团总支工作总结
2014/11/21 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
辞职书格式样本
2015/02/26 职场文书
学生病假条怎么写
2015/08/17 职场文书