重新认识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设计模式 Factory(工厂模式)
Jun 26 PHP
php json_encode奇怪问题说明
Sep 27 PHP
简单的cookie计数器实现源码
Jun 07 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
php 不使用js实现页面跳转
Feb 11 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 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
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php操作redis缓存方法分享
2015/06/03 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
基于Django的python验证码(实例讲解)
2017/10/23 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
python实现的分层随机抽样案例
2020/02/25 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
大学生四个方面的自我评价
2013/09/19 职场文书
校长就职演讲稿
2014/01/06 职场文书
个人自我剖析材料
2014/02/07 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
结婚仪式主持词
2015/06/29 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
电台广播稿范文
2015/08/19 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
Vue h函数的使用详解
2022/02/18 Vue.js