重新认识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 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
PHP读取ACCESS数据到MYSQL的代码
May 11 PHP
destoon常用的安全设置概述
Jun 21 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
PHP分页类集锦
Nov 18 PHP
php使用sql server验证连接数据库的方法
Dec 25 PHP
php开发时容易忘记的一些技术细节
Feb 03 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
Mar 05 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 PHP
TP5多入口设置实例讲解
Dec 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
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
Bootstrap插件全集
2016/07/18 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
9种python web 程序的部署方式小结
2014/06/30 Python
python新手经常遇到的17个错误分析
2014/07/30 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
python3.8下载及安装步骤详解
2020/01/15 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
24岁生日感言
2014/01/13 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
节能环保演讲稿
2014/08/28 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
2014个人年度工作总结
2014/12/15 职场文书
个人总结格式范文
2015/03/09 职场文书
毕业实习单位意见
2015/06/04 职场文书
同学聚会祝酒词
2015/08/10 职场文书
小学班主任工作随笔
2015/08/15 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
python如何读取和存储dict()与.json格式文件
2022/06/25 Python