php array_merge()和+的区别

本文揭示了PHP开发者在面试中遇到的困惑,通过实例详细讲解了数组操作(+、array_merge)中下标重合、索引数组与关联数组的融合规则,帮助理解并记忆关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在技术交流群里聊天引起的反思。
一个工作四五年的phper竟然在被面试官问到“标题”这样的问题的时候不知道如何回答???他的原话是老记但是记不住;
死记硬背显然是走不通的,下面的就是按照自己理解来的;

直接上代码:
1、两个数组都是索引数组【下标是从0开始的,自己分配的下标】

<?php
$a = ['php','java'];
$b = ['mysql','redis','kafka'];
echo '<pre>';
print_r($a + $b);
echo '<pre>';
print_r(array_merge($a,$b));

结果:
<pre>Array
(
    [0] => php
    [1] => java
    [2] => kafka
)//很显然:这里的[0][1]的值是$a的值,而[2]的值是$b的值;也就是说$a,$b中下标相同的话选取的是$a的值,在加$b中下标跟$a不同的值;
<pre>Array
(
    [0] => php
    [1] => java
    [2] => mysql
    [3] => redis
    [4] => kafka
)//而这里,就是将$a,$b两个数组合并然后从下标0开始组成数组;


2、当有一个数组为索引数组,而另一个为关联数组的时候

<?php
$a = ['php','java','a'=>'golang'];
$b = ['mysql','redis','kafka'];
echo '<pre>';
print_r($a + $b);
echo '<pre>';
print_r(array_merge($a,$b));


结果:
<pre>Array
(
    [0] => php
    [1] => java
    [a] => golang
    [2] => kafka
)//发现$a,$b如果下标相同的话,还是取$a的值,在加上$a,$b中下标不同的值;
<pre>Array
(
    [0] => php
    [1] => java
    [a] => golang
    [2] => mysql
    [3] => redis
    [4] => kafka
)//$a ,$b的值全都取出来,然后从下标0开始排

3、当两个数组都为关联数组【使用自己分配给数组的键的数组】

<?php
$a = ['php','java','a'=>'golang'];
$b = ['mysql','a'=>'redis','kafka'];
echo '<pre>';
print_r($a + $b);
echo '<pre>';
print_r(array_merge($a,$b));

结果:
<pre>Array
(
    [0] => php
    [1] => java
    [a] => golang
)//发现此时还是$a的所有的值,即使$a和$b都有下标为['a']的
<pre>Array
(
    [0] => php
    [1] => java
    [a] => redis
    [2] => mysql
    [3] => kafka
)//发现此时的值有了变化,$a和$b中下标为数字的[索引]从0开始的,而下标为字符串的[关联]的则是$b里面的值覆盖了$a里面的值

4、混合双打

<?php
$a = ['php','java','a'=>'golang','5'=>'python'];
$b = ['mysql','a'=>'redis','kafka'];
echo '<pre>';
print_r($a + $b);
echo '<pre>';
print_r(array_merge($a,$b));

结果:
Array
(
    [0] => php
    [1] => java
    [a] => golang
    [5] => python
)//发现下标相同的取得是$a的值
<pre>Array
(
    [0] => php
    [1] => java
    [a] => redis
    [2] => python
    [3] => mysql
    [4] => kafka
)//发现$a,$b下标为数字的从0开始,哪怕python的下标你已经标好了['5'],也得从0开始,而下标为字符串的则是$b的值替换了$a的值

总结啦…………

array_merge()将一个或者多个数组合并为一个数组;合并之后从下标为0开始,无论你是否规定了下标[除了关联数组的键值]

  • array + array :下标相同时,把最先出现的值作为返回结果,后出现的直接“抛弃”不管了;
  • array_merge():如果下标都为数字的话[索引数组],后出现的值不会覆盖原来的值,将所有的值都从下标为0开始排序;
    如果下标有字符串的话[关联数组],相同下标的后面出现的值则会覆盖最先出现的值,剩下的下标不是字符串的则从下标为0开始排序;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值