专栏首页俗人笔记PHP合并数组的几种方法比较
原创

PHP合并数组的几种方法比较

概述

php合并数组一般有三个方法

  1. 使用array_merge函数
  2. 使用array_merge_recursive函数
  3. 使用操作符+

对比差异

array_merge+的比较

  1. 对于字符串索引,array_merge以后面的数组为准,覆盖前面数组相应的值;+操作以前面的数组为准
  2. 对于数字索引,array_merge会同时保留所有数组的对应的值,并且把索引从0重排;+操作处理数字索引的策略和处理字符串索引一致:以前面的数组为准,且保留原索引

array_mergearray_merge_recursive的比较

  1. 对于相同的字符串索引,array_merge_recursive会把所有的值合并成一个数组,而array_merge会以后面的数组为准
  2. 对于数字索引,两者都会保留全部的值,并把索引从0重排

注意

  • array_merge只传入一个数组参数时,会把参数中的数组索引从0重排
  • array_merge_recursive对于相同的字符串索引,如果值仍是数组,则会对数组再次合并当做此索引的值

代码示例

$arr1 = [
    2 => 'super',
    1 => 'star',
    'hello' => 'my world',
    'arr' => [
        3 => 'ha',
        2 => 'ya',
        'hello' => 'wa',
    ]
];
$arr2 = [
    1 => 'lets',
    2 => 'laugh',
    'hello' => 'your world',
    'arr' => [
        'yes no'
    ]
];

print_r(array_merge($arr1, $arr2));

print_r($arr1 + $arr2);

print_r(array_merge_recursive($arr1, $arr2));

以上代码输出为:

Array
(
    [0] => super
    [1] => star
    [hello] => your world
    [arr] => Array
        (
            [0] => yes no
        )

    [2] => lets
    [3] => laugh
)
Array
(
    [2] => super
    [1] => star
    [hello] => my world
    [arr] => Array
        (
            [3] => ha
            [2] => ya
            [hello] => wa
        )

)
Array
(
    [0] => super
    [1] => star
    [hello] => Array
        (
            [0] => my world
            [1] => your world
        )

    [arr] => Array
        (
            [3] => ha
            [2] => ya
            [hello] => wa
            [3] => yes no
        )

    [2] => lets
    [3] => laugh
)

Bug

在7.0.20版本中,array_merge_recursive合并相同字符串索引的数组时,合并结果中会有相同的数字索引。

$arr1 = [
    'arr' => [
        3 => 'hello',
        2 => 'world',
    ]
];
$arr2 = [
    'arr' => [
        'yes',
        'no'
    ]
];

$result = array_merge_recursive($arr1, $arr2);

print_r($result);

以上代码会输出:

Array
(
    [arr] => Array
        (
            [3] => hello
            [2] => world
            [2] => yes
            [3] => no
        )

)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何免费将网站升级到HTTPS

    由于HTTPS可以防止页面被中间人攻击、确保数据传输过程不被篡改,保证内容完整性。所以升级网站到HTTPS是大的趋向。像苹果AppStore已经禁止使用HTTP...

    俗可耐
  • PHP Header跳转传递Post数据

    向目标链接中post数据,一种解决方法就是输出一段含有表单HTML网页,在页面里通过JS提交表单的方式模拟Post跳转。

    俗可耐
  • 创建你的第一个composer包

    Composer是PHP的包管理器,我们可以很方便地使用别人共享的包,当然我们也可以创建自己的包以分享给其他人使用。本文就是教你如何创建自己的第一个compos...

    俗可耐
  • LSTM与GRU简单介绍

    和我们人一样,RNN虽然擅长处理序列问题,但它也只能记住重要的短时信息,对于长时间的信息它则很难处理。也就是说,如果一条序列足够长,那它将很难把信息从较早的时间...

    用户7569543
  • PHP-Laravel控制器使用(C)

    其中Auth存放的是框架自带的Auth认证相关的示例控制器文件,controller.php文件是框架的基类控制器。

    cwl_java
  • Telnet必知必会

    早期计算机并没有考虑网络互联的场景,在很长一段时间,计算机作为昂贵的资源只在军方和高校使用。因为能用的起电脑的国家和机构少之再少,因此,大家的通信也非常简单,简...

    运维部落
  • 【RL-TCPnet网络教程】第31章 Telnet远程登录基础知识

    本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作。

    armfly
  • 使用Python实现Telnet远程登录

    # -*- coding: utf-8 -*- import telnetlib '''Telnet远程登录:Windows客户端连接Linux服务...

    py3study
  • 杨杰博士莅临我校,并做了报告:Recent Advances in Sequence Labeling

    之前了解杨杰博士是从导师那里得知的,模模糊糊,当时也只是知道这个名字而已,谁知道几个月后自己竟然还能作为迎宾亲自去迎接。O(∩_∩)O哈哈~ 路上交流了很多,...

    zenRRan
  • Python-定时器使用

    通过crontab -e命令,添加定时器任务。定期执行python的脚本。如果-e后面是多条命名,可以用分号”;”进行分割。用分号 (;) 所分割的话,那么命令...

    py3study

扫码关注云+社区

领取腾讯云代金券