重新认识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生成文件
Jan 15 PHP
php 目录与文件处理-郑阿奇(续)
Jul 04 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
php获取操作系统语言代码
Nov 04 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
微信公众号开发之语音消息识别php代码
Aug 08 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
PHP中命名空间的使用例子
Mar 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
php实现的mongoDB单例模式操作类
2018/01/20 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
python 正则式使用心得
2009/05/07 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
对python中的argv和argc使用详解
2018/12/15 Python
django富文本编辑器的实现示例
2019/04/10 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
网游商务专员求职信
2013/10/15 职场文书
广播体操口号
2014/06/18 职场文书
优秀团队申报材料
2014/12/26 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python