在PHP中可以使用array_merge函数和两个数组相加array+array的方式进行数组合并,但两者效果并不相同,区别如下:

  • 当下标为数值时,array_merge()不会覆盖掉原来的值,但array+array合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖).
  • 注意区别 array_merge_recursive函数
  • 当下标为字符时,array+array 把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值.

演示案例:

<?php
echo "<pre>"; /*
*****************
* 如果key是字符串 *
*****************
*/
$arr1 = [
'name' => 'zhangsan',
'age' => '28',
];
$arr2 = [
'name' => 'lisi',
'age' => '17',
];
//如果键名为字符,且键名相同,array_merge()最后面的元素值会覆盖前面的元素值
print_r(array_merge($arr1, $arr2));
/*
Array
(
[name] => lisi
[age] => 17
)
*/ //PHP中还有一个函数:array_merge_recursive
//递归地合并一个或多个数组,如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去
print_r(array_merge_recursive($arr1, $arr2));
/*
Array
(
[name] => Array
(
[0] => zhangsan
[1] => lisi
) [age] => Array
(
[0] => 28
[1] => 17
) )
*/ //如果键名为字符,且键名相同,两个数组相加会将最先出现的元素值作为结果
print_r($arr1 + $arr2);
/*
Array
(
[name] => zhangsan
[age] => 28
)
*/ //两个数组的key的个数不相同
$arr1 = [
'name' => 'zhangsan',
'age' => '28',
];
$arr2 = [
'name' => 'lisi',
'age' => '17',
'sex' => 'nan',
];
print_r(array_merge($arr1, $arr2));
/*
Array
(
[name] => lisi
[age] => 17
[sex] => nan
)
*/ print_r($arr1 + $arr2);
/*
Array
(
[name] => zhangsan
[age] => 28
[sex] => nan
)
*/ echo "<hr>"; /*
***************
* 如果key是数字 *
***************
*/
$arr1 = ['zhangsan','28'];
$arr2 = ['lisi','17']; //如果键名为数字,array_merge()不会进行覆盖,但是会覆盖掉前面相同键值
print_r(array_merge($arr1,$arr2));
/*
Array
(
[0] => zhangsan
[1] => 28
[2] => lisi
[3] => 17
)
*/ //如果键名为数字,数组相加会将最先出现的值作为结果,后面键名相同的会被抛弃
print_r($arr1+$arr2);
/*
Array
(
[0] => zhangsan
[1] => 28
)
*/ //再比如
$arr1 = [3=>'zhangsan',9=>'28'];
$arr2 = [3=>'lisi',9=>'17',12=>'nan']; //array_merge()会覆盖掉前面相同键值,重新从0开始进行键排序
print_r(array_merge($arr1,$arr2));
/*
Array
(
[0] => zhangsan
[1] => 28
[2] => lisi
[3] => 17
[4] => nan
)
*/ //数组相加 不会对键进行重新排序
print_r($arr1+$arr2);
/*
Array
(
[3] => zhangsan
[9] => 28
[12] => nan
)
*/

PHP中array_merge和array+array的区别的更多相关文章

  1. PHP中array_merge函数与array+array的区别

    在PHP中可以使用array_merge函数和两个数组相加array+array的方式进行数组合并,但两者效果并不相同,下面为大家介绍两者具体的使用区别. 区别如下: 当下标为数值时,array_me ...

  2. PHP中array_merge和array相加的区别分析

    今天处理一个这样的问题:如何获取字符键名相同值不同的两个数组值集合,用array_merge和数组相加都不可行,让我认真比较了下PHP中array_merge和array相加的区别 首先来看看键名是s ...

  3. php 通过array_merge()和array+array合并数组的区别和效率比较

    众所周知合并两个数组可以使用array_merge(),这是php提供的一个函数.另外还可以通过 array 的方式来合并数组,这两种直接有什么区别,哪一个的效率更高呢? array_merge() ...

  4. Java-杂项: Java中Array和ArrayList区别

    ylbtech-Java-杂项: Java中Array和ArrayList区别 1.返回顶部 1. 1)精辟阐述:可以将 ArrayList想象成一种“会自动扩增容量的Array”. 2)Array( ...

  5. 解析C#中[],List,Array,ArrayList的区别及应用

    [] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayLis ...

  6. array_flip() array_merge() array+array的使用总结

    array_flip(array); //传递一个数组参数,对该数组的键.值进行翻转 例如: $a = array( 'a', 'b', 'c' ); print_r(array_flip($a)); ...

  7. PHP array_flip() array_merge() array+array的使用总结

    array_flip(array); //传递一个数组参数,对该数组的键.值进行翻转 例如: $a = array( 'a', 'b', 'c' ); print_r(array_flip($a)); ...

  8. C# 中的数组(array)

    原文 C# 中的数组(array) 特性 数组是一个无序的元素序列.数组元素存储在一个连续性的内存块中,并可使用一个整数索引来访问. C# 声明数组变量时,数组的大小不是声明的一部分.这点与C/C++ ...

  9. php中foreach()函数与Array数组经典案例讲解

    //php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...

随机推荐

  1. Linux应该知道的技巧

    https://coolshell.cn/articles/8883.html https://www.quora.com/Linux/What-are-some-time-saving-tips-t ...

  2. 11个超震撼的HTML5和纯CSS3动画源码

    1.jQuery多功能手风琴个人信息菜单面板 这是一款基于jQuery的手风琴个人信息菜单面板,每一个菜单项展开后可以自定义布局,因此可以为每一个菜单项实现多功能.类似这样的多功能菜单还有jQuery ...

  3. 学习:ups电池放电时间是怎么计算的?

    例如现有20KVA的UPS一台,负载功率为8000W,电池节数为64节,容量为32AH,电池电压为12V,那么UPS电源的放电时间计算方法如下: 负载功率*放电时长=电池放电量*电池电压*逆变率 80 ...

  4. halcon电路断裂检测

    read_image (Image, 'pcb')dev_close_window ()get_image_size (Image, Width, Height)dev_open_window (0, ...

  5. ZipUtil

    /* * To change this license header, choose License Headers in Project Properties. * To change this t ...

  6. 【CentOS-7+ Ambari 2.7.0 + HDP 3.0+HAWQ2.3.00】遭遇问题及解决记录

    一.zookeeper超出最大连接限制:ambari server检测到critical错误, zookeeper server on ep-bd01:2181 连接被积极拒绝,翻看主机上zookee ...

  7. 阿里云负载均衡SLB 七层https协议 nginx 获取真实IP

    https://www.cnblogs.com/baylorqu/p/8565667.html https://help.aliyun.com/document_detail/54007.html

  8. Linux 文件系统剖析

    [转自]https://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/ 按照分层结构讨论 Linux 文件系统 在文件系统方面,Linu ...

  9. linux的基本操作(文本编辑工具vim)

    文本编辑工具vim * 命令模式:在一般模式下,输入”:”或者”/”即可进入命令模式.在该模式下,你可以搜索某个字符或者字符串,也可以保存.替换.退出.显示行号等等. 下面笔者教你如何在一个空白文档中 ...

  10. vue-router 进阶

    简单回顾一下vue基础部分 动态路由匹配 路由配置方法 export default new Router({ routes: [ { path: '/router01/:name', name: ' ...