重新认识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中实现图片的锐化
Oct 09 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
ThinkPHP分页实例
Oct 15 PHP
PHP的命令行命令使用指南
Aug 18 PHP
PHP书写格式详解(必看)
May 23 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
Laravel框架集合用法实例浅析
May 14 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
php自定义时间转换函数示例
2016/12/07 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
浅析Python 多行匹配模式
2020/07/24 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
司仪主持词两篇
2014/03/22 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
Python超详细分步解析随机漫步
2022/03/17 Python
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技
Ruby处理YAML和json数据
2022/04/18 Ruby