重新认识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 相关文章推荐
cmd下运行php脚本
Nov 25 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
php的4种常见运行方式
Mar 20 PHP
ThinkPHP使用Smarty第三方插件方法小结
Mar 19 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
浅谈Laravel中使用Slack进行异常通知
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
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
PHP计数器的实现代码
2013/06/08 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
简单的js表格操作
2016/09/24 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
EM算法的python实现的方法步骤
2018/01/02 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
python函数的作用域及关键字详解
2019/08/20 Python
简单了解python协程的相关知识
2019/08/31 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
乡镇八一建军节活动方案
2014/08/24 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
同学聚会通知短信
2015/04/20 职场文书
小学生读书笔记范文
2015/06/30 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书