array_merge、array_merge_recursive
我在php学习在使用到最多的数据合并方法就是array_merge、array_merge_recursive函数了,当然还会少用到操作符(+)函数了,下面我来给大家整理一下这几个函数的一些用法。
PHP中,有3种方法来进行数组合并:操作符(+)、array_merge、array_merge_recursive,其中前两种方式为一维数组的合并,第三种为递归合并。
在说PHP的数组合并之前,先要明白,PHP的数组分为索引数组和关联数组。索引数组是指没有键值和键值为数字的数组,关联数组是指键值为字符的数组。
注:操作符(+)和array_merge的区别:当为索引数组时,合并相同键值的数组,操作符以最前面的值为合并后的结果,array_merge则是把相同键值的数组合并,并重新索引(不同键值的数组合并时,也会从0开始重新生成数字索引)。
一、“+”运算符
规则:
当两个数组的键名是数字键名或者字符串键名
$c = $a + $b
在$a后追加($b在$a中不存在的键名)键名和值
注意:
1、不覆盖,只是追加不存在的键名和对应的值
2、键名不重新索引
3、无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回
例1:数字键名:
- $a = array(
- 'a',
- );
- $b = array(
- 'u',
- );
- $c = $a + $b;
- var_dump($c);
- output:
- array(1) {
- [0]=>
- string(1) "a"
- }
- 例2:数字键名
- $a = array(
- 66=>'a',
- );
- $b = array(
- 60=>'u',
- 66=>'c'
- );
- $c = $a + $b;
- var_dump($c);
- output:
- array(2) {
- [66]=>
- string(1) "a"
- [60]=>
- string(1) "u"
- }
- 例3:字符键名
- <?php
- $a = array(
- 1=>'a',
- 2=>'b',
- 'c'=>'c',
- 'd'=>'d',
- );
- $b = array(
- 1=>'u',
- 3=>'v',
- 'c'=>'w',
- 'd'=>'x',
- 'y'=>'y',
- 60=>'z',
- );
- $c = $a + $b;
- var_dump($c);
- ?>
- output:
- array(7) {
- [1]=>
- string(1) "a"
- [2]=>
- string(1) "b"
- ["c"]=>
- string(1) "c"
- ["d"]=>
- string(1) "d"
- [3]=>
- string(1) "v"
- ["y"]=>
- string(1) "y"
- [60]=>
- string(1) "z"
- }
二、array_merge函数。当为关联数组时,合并相同字符键值的数组,操作符合并规则是前面的覆盖后面的,array_merge则是后面的覆盖前面的。
例:
- $arr5 = array('a'=>'aaaa');
- $arr6 = array('a'=>'bbbb');
- var_dump($arr5+$arr6);
- var_dump(array_merge($arr5,$arr6));
- 输出:
- array (size=1)
- 'a' => string 'aaaa' (length=4)
- array (size=1)
- 'a' => string 'bbbb' (length=4)
array_merge() 将一个或多个PHP数组合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
三、array_merge_recursive的合并规则和array_merge相同,只是array_merge_recursive支持多维数组的合并。
例:
- $a = array(
- 1=>'a',
- 2=>'b',
- 'c'=>'c',
- 'd'=>'d',
- );
- $b = array(
- 1=>'u',
- 3=>'v',
- 'c'=>'w',
- 'd'=>'x',
- 'y'=>'y',
- 60=>'z',
- );
- var_dump(array_merge_recursive($a,$b));
- 输出:
- array (size=8)
- 0 => string 'a' (length=1)
- 1 => string 'b' (length=1)
- 'c' =>
- array (size=2)
- 0 => string 'c' (length=1)
- 1 => string 'w' (length=1)
- 'd' =>
- array (size=2)
- 0 => string 'd' (length=1)
- 1 => string 'x' (length=1)
- 2 => string 'u' (length=1)
- 3 => string 'v' (length=1)
- 'y' => string 'y' (length=1)
- 4 => string 'z' (length=1)
array_merge、array_merge_recursive的更多相关文章
- PHP数组合并:[“+”运算符]、[array_merge]、[array_merge_recursive]区别
1.“+”运算符规则: 当两个数组的键名是数字键名或者字符串键名 $c = $a + $b 在$a后追加($b在$a中不存在的键名)键名和值注意: 1.不覆盖,只是追加不存在的键名和对应的值 2.键名 ...
- php中的常用数组函数(七) 数组合并 array_merge()和array_merge_recursive()
$arr1 = array(1, 2, 3, 4, 'color'=>'red'); $arr2 = array('a', 'b', 'c', 'color'=>'blue'); prin ...
- 2016/3/20 数组定义 数组遍历 超全局数组 数组元素设置(in_array() 、array_reverse()、count()、array_unique()、unset()、array_values、array_merge、array_push) 列表实例
一.数组定义 php数组与其他语言的数组的不同: 其他例如java语言 :同一种类型数据的集合. php:数组可以存储任何类型的数据.同一个数组中可以放int类型也可以放string类型 ①索引数组的 ...
- PHP数组操作汇总 php数组的使用技巧
对于Web编程来说,最重要的就是存取和读写数据了.存储方式可能有很多种,可以是字符串.数组.文件的形式等. 数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是我学习的小 ...
- php数组使用技巧及操作总结
数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是一些小结,借此记之,便于以后鉴之. 1. 数组定义 数组的定义使用 array()方式定义,可以定义空数组:<?ph ...
- PHP合并数组的三种方法的分析与比较
常用的合并数组的方法有三种:array_merge().array_merge_recursive().+,下面一个一个介绍 array_merge() 此函数合并一个或多个数组,当输入的数组中有相同 ...
- php数组和部分操作函数
1. 数组定义 数组的定义使用 array()方式定义,可以定义空数组: <?php $number = array(1,3,5,7,9); //定义空数组 $result = array(); ...
- PHP数组各种操作与函数汇总
对于Web编程来说,最重要的就是存取和读写数据了.存储方式可能有很多种,可以是字符串.数组.文件的形式等.数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是我学习的小结,借 ...
- ThinkPHP执行原生sql,实现一些复杂的业务需求
1)事情起因:写php的同事做了社区消息接口,主要返回几个方面的消息,如我的主贴的点赞.我的层帖的点赞.我的主贴的评论.我的评论的评论, 数据因为关联了5张以上的表,返回的格式不一: 如原来的thin ...
随机推荐
- Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)
不多说,直接上代码. 一共12列,我们只需提取有用的列:第二列(犯罪类型).第四列(一周的哪一天).第五列(具体时间)和第七列(犯罪场所). 思路分析 基于项目的需求,我们通过以下几步完成: 1.首先 ...
- C++课程上 有关“指针” 的小结
上完了C++的第二节课以后,觉得应该对这个内容进行一个小结,巩固知识点,并对我的心情进行了一个侧面烘托... 开始上课的老师: 正在上课的我: 上去敲代码的我: 过程是这样的: 下来的我: 非常的尴尬 ...
- HDU 2242 考研路茫茫——空调教室(边双连通分量+树形dp+重边标号)
http://acm.hdu.edu.cn/showproblem.php?pid=2242 题意: 思路:首先求一下双连通分量,如果只有一个双连通分量,那么无论断哪根管子,图还是连通的. 最后只需要 ...
- hibernate报错 java.lang.StackOverflowError: null
在使用hibernate时,报错 java.lang.StackOverflowError: null 把当前线程的栈打满了 java.lang.StackOverflowError: null at ...
- WPF基础学习笔记整理 (二) XAML
基础知识: XAML:Extensible Application Markup Language, zammel: 用于实例化.NET对象的标记语言: XMAL使用树形逻辑结构描述UI: BAML: ...
- nginx 跨域解决
server { listen 8811 default_server; root /opt/bp; # Make site accessible from http://localhost/ ser ...
- shell 加法计算
Shell 相加目前发现有 3 种写法: 1. a=10 b=20 c=`expr ${a} + ${b}` echo "$c" 2. c=$[ `expr 10 + 20` ] ...
- 【Robot Framework 项目实战 02】SeleniumLibrary Web UI 自动化
前言 SeleniumLibrary 是针对 Robot Framework 开发的 Selenium 库.它也 Robot Framework 下面最流程的库之一.主要用于编写 Web UI 自动化 ...
- Java成员变量和局部变量
Java成员变量和局部变量 一.成员变量和局部变量 二.static关键字 三.成员变量和静态变量区别 四.main函数 五.静态函数什么时候用 六.静态代码块 七.构造代码块 构造代码块先于构造函数 ...
- H5表单基础知识(二)
表单新增属性 <!--<input type="text" class="name" />--> <!-- placeholder ...