php array ( [a] => 1 ) 字符串,php合并数组时array_merge和+号的区别

大家都知道合并数组常用的两种方式array_merge 和 +

但是二者是有区别的,用到的时候要小心了,这里是有坑的,比如下面的代码

$a = ['zhangsan', 'lisi'];

$b = ['wangwu', 'zhaoliu'];

$r1 = $a + $b;

$r2 = array_merge($a, $b);

var_dump($r1);

var_dump($r2);

输出结果

# $r1

array (size=2)

0 => string 'zhangsan' (length=8)

1 => string 'lisi' (length=4)

# $r2

array (size=4)

0 => string 'zhangsan' (length=8)

1 => string 'lisi' (length=4)

2 => string 'wangwu' (length=6)

3 => string 'zhaoliu' (length=7)

为了检验二者的区别,在看下面的代码。

$a = ['name' => 'zhangsan', 'age' => 24];

$b = ['name' => 'lisi', 'sex' => 'male', 'city' => 'shanghai'];

$r1 = $a + $b;

$r2 = array_merge($a, $b);

var_dump($r1);

var_dump($r2);

输出结果

# $r1

array (size=4)

'name' => string 'zhangsan' (length=8)

'age' => int 24

'sex' => string 'male' (length=4)

'city' => string 'shanghai' (length=8)

# $r2

array (size=4)

'name' => string 'lisi' (length=4)

'age' => int 24

'sex' => string 'male' (length=4)

'city' => string 'shanghai' (length=8)

看到这是不是明白了一点

在数组为索引数组(即键值为数字)时,用 + 合并数组时,+ 前的数组会把 + 后的数组中拥有相同键的值覆盖掉;而array_merge则不会覆盖拥有相同键的值,并且会重新生成新的键。

在数组为关联数组(即键值为字符串)时,用 + 合并数组时,+ 前的数组会把 + 后的数组中拥有相同键的值覆盖掉;而array_merge合并数组时,参数后面的数组会把前面的数组中拥有相同键的值覆盖掉。

为了验证我们的猜想,再看下面的例子。

$a = [0 => 'profile_a', 'name' => 'zhangsan', 'age' => 24, 'city' => 'beijing'];

$b = [0 => 'profile_b', 1 => 'this is zhangsan`s profile', 'sex' => 'male', 'city' => 'shanghai'];

$r1 = $a + $b;

$r2 = array_merge($a, $b);

var_dump($r1);

var_dump($r2);

输出结果

# $r1

array (size=6)

0 => string 'profile_a' (length=9)

'name' => string 'zhangsan' (length=8)

'age' => int 24

'city' => string 'beijing' (length=7)

1 => string 'this is zhangsan`s profile' (length=26)

'sex' => string 'male' (length=4)

# $r2

array (size=7)

0 => string 'profile_a' (length=9)

'name' => string 'zhangsan' (length=8)

'age' => int 24

'city' => string 'shanghai' (length=8)

1 => string 'profile_b' (length=9)

2 => string 'this is zhangsan`s profile' (length=26)

'sex' => string 'male' (length=4)

当数组中的键既有数字又有字符串时,使用 + 合并数组依然是前边的数组覆盖后面数组中拥有想似键的值,array_merge 则会保留合并键为数字的值,覆盖键为字符的值(后面的覆盖前面的) 。

php的数组过于灵活了,带来便利的同时也要注意一些坑。

> 测试环境

> php v 7.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值