重新认识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 05 PHP
phpize的深入理解
Jun 03 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
微信支付开发订单查询实例
Jul 12 PHP
php组合排序简单实现方法
Oct 15 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
Mar 05 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP实现简易计算器功能
Aug 28 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 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实现多服务器共享SESSION数据的方法
2007/03/16 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
化学专业毕业生自荐信
2013/11/15 职场文书
文明演讲稿范文
2014/05/12 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
励志演讲稿600字
2014/08/21 职场文书
交通安全教育主题班会
2015/08/12 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers