重新认识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 db类库进行数据库操作
Mar 19 PHP
php fckeditor 调用的函数
Jun 21 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
php面向对象编程self和static的区别
May 08 PHP
php简单截取字符串代码示例
Oct 19 PHP
php 自定义错误日志实例详解
Nov 12 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
php-fpm中max_children的配置
Mar 15 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
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
js 替换
2008/02/19 Javascript
js+css在交互上的应用
2010/07/18 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
Python WEB应用部署的实现方法
2019/01/02 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
Python for i in range ()用法详解
2020/09/18 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
python怎么删除缓存文件
2020/07/19 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
如何提高JDBC的性能
2013/04/30 面试题
某公司Java工程师面试题笔试题
2016/03/27 面试题
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
建筑经济管理专业求职信分享
2014/01/06 职场文书
医生进修自我鉴定
2014/01/19 职场文书
党员干部承诺书
2014/03/25 职场文书
进口业务员岗位职责
2014/04/06 职场文书
旅游文化节策划方案
2014/06/06 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
幽灵公主观后感
2015/06/09 职场文书
2016新年年会主持词
2015/07/06 职场文书
2015年暑假生活总结
2015/07/13 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
java代码实现空间切割
2022/01/18 Java/Android