php +和array_merge合并数组

array_merge函数会用第二个参数表示的数组中同名键的值覆盖第一个参数表示的数组中同名键的值,数值键不会覆盖,并且会重新索引。

+只会将第二个数组中不存在于第一个数组中的键的键值对加入第一个数组,不管是数值键还是其他键,而数值键不会重新索引。

$arr1 = [
    3         =>  'q',
    2         =>  'w',
    'a'       =>  'e',
    'b'       =>  'r',
    'arr'     =>  [
        2       => 't',
        'c'     => 'y'
    ]
];

$arr2 = [
    3        =>   'z',
    4        =>   'x',
    'a'      =>   'c',
    'c'      =>   'v',
    'arr'    => [
        2      =>  'b',
        'd'    =>  'n'
    ]
];

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

运行它:
在这里插入图片描述
字符串形式的数字和整型数据的相等性:

if (1 == '1') {
    echo 1 . PHP_EOL;    // 会输出
}

if (2 == '02') {
    echo 2;    // 会输出
}

array_merge函数会将字符串形式的数值键当做数值,在新数组中会被重新索引:

$arr1 = [
    3      =>  'q',
    4      =>  'w'
];

$arr2 = [
    '3'    =>  'z',
    '04'   =>  'x'
];

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

运行它:
在这里插入图片描述
可见对于字符串04,array_merge函数并没有将其当做数值键重新索引。

而+合并数组时对于字符串和数字的表现:

$arr1 = [
    3      =>  'q',
    4      =>  'w'
];

$arr2 = [
    '3'    =>  'z',
    '04'   =>  'x'
];

print_r($arr1 + $arr2);

运行它:
在这里插入图片描述
可见对于+合并数组时,字符串04被当做了与数值4不同的键,这说明+合并数组时,并不是使用==或===来判断键是否相等。

总结:在普通的条件判断中,字符串01与数值1是相等(==)的,而在两种方式的数组合并时,字符串01和数值1都是不同的键,且字符串01都不被当做数值键,因此array_merge函数不会将字符串01重新索引。

array_merge_recursive函数会将两个数组中的同名键的值放到一个数组中(数值键会重新索引),如果两个同名键的值都是数组,则这两个子数组会合并,且这两个子数组中的数值键也不会重新索引,第二个数组中的数值键会在第一个数组中最大数值键的基础上自增数值键,使用此函数合并上例两个数组:
在这里插入图片描述
如果两个子数组合并时其中还含数组,则会继续递归合并,且内层数组中的数值键也不会重新索引:

$arr1 = [
    'arr'       =>  [
        2       => [1,2],
        'c'     => [5,6]
    ]
];

$arr2 = [
    'arr'      => [
        0      =>  [9,10],
        2      =>  [3,4],
        'c'    =>  [7,8]
    ]
];

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

运行它:
在这里插入图片描述

array_merge函数单独用于一个数组时可用于重新索引数值键,即使数值键是以字符串形式给出的:

$arr = [4 => 'a', 7 => 'b', '5' => 'c', '06' => 'd'];
print_r(array_merge($arr));

运行它:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值