我们在开发中,有时候会将两个数组合并连接起来,这个时候要注意了,千万不要偷懒直接使用+号哦,为什么呢?我们看看以下代码:


$a = [1, 2];
$b = [4, 5, 6]; $c = $a + $b;
print_r($c);

请用第一直接告诉我它的结果是什么?或许我这么问你应该能猜到,它的结果是:


Array
(
[0] => 1
[1] => 2
[2] => 6
)

看出来了吧,用+号操作符连接的数组,结果取的是并集。也就是根据键,相同键的不会覆盖,没有键加入进来形成一个新数组。并不是将两个数组真的加起来。

如果我们用$b+$a呢?那么结果就是$b的内容。


$c = $b + $a;
print_r($c); Array
(
[0] => 4
[1] => 5
[2] => 6
)

那么我们要获得1,2,4,5,6这样一个数组要怎么办呢?没错,使用array_merge()函数,请注意数组Key的位置:


$c = array_merge($a, $b);
print_r($c); Array
(
[0] => 1
[1] => 2
[2] => 4
[3] => 5
[4] => 6
) $c = array_merge($b, $a);
print_r($c); Array
(
[0] => 4
[1] => 5
[2] => 6
[3] => 1
[4] => 2
)

如果是key/value形式的Hash数组呢?结果也是一样的,$a中没有键将合并过来,相同的键将不处理。


$a = ['a' => 1, 'b' => 2];
$b = ['a' => 4, 'b' => 5, 'c' => 6]; print_r($a+$b); Array
(
[a] => 1
[b] => 2
[c] => 6
) $c = array_merge($a, $b);
print_r($c); $c = array_merge($b, $a);
print_r($c); Array
(
[a] => 1
[b] => 2
[c] => 6
)
Array
(
[a] => 4
[b] => 5
[c] => 6
)
Array
(
[a] => 1
[b] => 2
[c] => 6
)

上述Hash数组,使用array_merge()函数的结果和使用+号的结果是一样的,这是因为他们还是进行了键的对比。所以合并后的数组不会增加内容,如果是未定义下标的则会直接以数字下标添加进去。

最后,我们再试试.操作符的连接:


$c = $a . $b;
print_r($c); ArrayArray

好吧,强转成string类型的字符串再拼接起来了,并无特别的意义。

测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E4%B8%AD%E7%94%A8%2B%E5%8F%B7%E8%BF%9E%E6%8E%A5%E6%95%B0%E7%BB%84%E7%9A%84%E7%BB%93%E6%9E%9C%E6%98%AF%EF%BC%9F.php

参考文档:https://www.php.net/manual/zh/language.operators.array.php

关注公众号:【硬核项目经理】获取最新文章

添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料

知乎、公众号、抖音、头条搜索【硬核项目经理】

B站ID:482780532

PHP中用+号连接数组的结果是?的更多相关文章

  1. js指定分隔符连接数组元素join()

    指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. 语法: arrayObject.join(分隔符) 参数说明: 注意:返回 ...

  2. cakephp中使用大括号的形式避免用点号连接sql语句

    在cakephp中可以使用{}的形式来代替点号连接sql语句,减少出错的几率

  3. linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号

    需求描述: 今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少, 我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22, 在此做下记录. 操作过程: 1 ...

  4. foreach() 中用指针指向数组元素,循环结束后最好销毁指针

    之前发过一次微博,今天又遇到这个问题,并且再次犯错,于是决定再加深一下. 就举php.net里的一个例子吧 $a = array('abe','ben','cam'); foreach ($a as ...

  5. JS对象 指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

    指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. 语法: arrayObject.join(分隔符) 参数说明: 注意:返回 ...

  6. SQL:安装多个实例,修改实例端口号,和IP加端口号连接实例

    sql server 安装第一个实例,默认实例的端口是1433, 一个库中如果有多个实例,从第二个实例开始的端口是动态端口,需要的话,自己手工指定为静态端口,如指定第二个实例为1434 或着随意一个如 ...

  7. C++中用二维数组传参时形参该怎样写[转]

    二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写? 要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型. 正 ...

  8. join() ---- 使用四种不同的分隔符连接数组元素

    var a = ['Wind', 'Rain', 'Fire']; var myVar1 = a.join(); // myVar1的值变为"Wind,Rain,Fire" var ...

  9. MySQL数据库无法使用+号连接字符串的处理方法

    转自:http://www.maomao365.com/?p=10003 摘要: 下文讲述MySQL数据库,字符串连接的方法分享,如下所示:实现思路: 使用concat函数对两个字符串进行连接在MyS ...

随机推荐

  1. 如何不耍流氓的做运维之-SHELL脚本

    前言 大家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写SHELL脚本如何能够不耍流氓. 下面的案例,我们以MySQL数据库备份SHELL脚本的案例来进行阐述: 不记录日志 ...

  2. 区块链-NFT 的实现原理

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/1785262 ...

  3. 【vulapps】Sturcts2 S2-037RCE漏洞复现

    一.漏洞基本信息 S2-037官方公告 CVE编号:CVE-2016-4438漏洞名称:Struts(S2-037)远程代码执行漏洞发布日期:2016.615受影响的软件及系统:Apache stru ...

  4. 常见web中间件漏洞(四)Tomcat漏洞

    这部分好久没写了,继续更新web中间件漏洞思路整理(不复现) ,争取...整理完 前几篇指路链接: nginx: https://www.cnblogs.com/lcxblogs/p/13596239 ...

  5. C51—模拟IIC总线实现EEPROM存取数据

    a - 什么是IIC总线 -什么是EEPROM -IIC总线的通信格式 模块化设计注解 整体代码 - 什么是IIC总线 IIC总线是同步通信的一种特殊形式,具有接线口少.控制简单.器件封装形式小.通信 ...

  6. Skywalking-07:OAL原理——解释器实现

    OAL 解释器实现 OAL 解释器是基于 Antlr4 实现的,我们先来了解下 Antlr4 Antlr4 基本介绍 Antlr4 使用案例 参考Antlr4的使用简介这篇文章,我们实现了一个简单的案 ...

  7. final、finally与finalize的区别?

    一.final.finally与finalize的区别 final:final是一个修饰符,可以修饰类,方法和变量.final修饰类表示类不能被其它类继承,并且该类中的所有方法都会隐式的被final修 ...

  8. Linux下用gdb 调试、查看代码堆栈

      Linux中用gdb 查看代码堆栈的信息 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的. 调试的话输入: gd ...

  9. jQuery中ajax请求的六种方法(三、二):$.get()方法

    2.$.get()方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  10. ElasticSearch之配置文件详解

    ################################### Cluster ################################### #定义集群名称,默认是elasticse ...