重新认识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编程中八种常见的文件操作方式
Nov 19 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
php网页病毒清除类
Dec 08 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
php 批量查询搜狗sogou代码分享
May 17 PHP
php数组函数array_walk用法示例
May 26 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 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 伪静态之IIS篇
2014/06/02 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
javascript 写类方式之七
2009/07/05 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
js获取页面description的方法
2015/05/21 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
python 提取文件的小程序
2009/07/29 Python
Python运用于数据分析的简单教程
2015/03/27 Python
Python随机生成数模块random使用实例
2015/04/13 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python进程和线程用法知识点总结
2019/05/28 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
Python小白垃圾回收机制入门
2020/06/09 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
学校经典推荐信
2013/10/30 职场文书
工作失职检讨书范文
2014/01/16 职场文书
竞选部长演讲稿
2014/04/26 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
八年级作文之友谊
2019/12/02 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL