重新认识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入门学习的几个不错的实例代码
Jul 13 PHP
php sprintf()函数让你的sql操作更安全
Jul 23 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
php筛选不存在的图片资源
Apr 28 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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
DedeCms模板安装/制作概述
2007/03/11 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
JS array 数组详解
2009/03/22 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
python从入门到精通(DAY 1)
2015/12/20 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
python得到单词模式的示例
2018/10/15 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
员工自我工作评价
2015/03/06 职场文书
博士给导师的自荐信
2015/03/06 职场文书
孔繁森观后感
2015/06/10 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL