胡乱记录了php合并数组时遇到的坑
数组合并的 += 写法
坑
<?php
$a = [
1 => '12312',
2 => '123',
];
$b = [
1 => 'a',
2 => 'b',
];
$c = [
3 => 'a',
4 => 'b',
];
echo '两个数组索引相同:' . php_EOL;
$a += $b;
print_r($a);
echo '两个数组索引不同:' . php_EOL;
$b += $c;
print_r($b);
返回的结果:
两个数组索引相同:
Array
(
[1] => 12312
[2] => 123
)
两个数组索引不同:
Array
(
[1] => a
[2] => b
[3] => a
[4] => b
)
array_merge写法
坑
<?php
$a =[
'a' => '字母键值1',
1 => '数字键值1',
2 => '数字键值2',
'b' => '字母键值2',
];
$b = [
'a' => '字母键值3',
'b' => '字母键值4',
];
$c = [
1 => '数字键值1',
2 => '数字键值2',
];
echo '两个数组索引存在相同的:' . php_EOL;
var_dump(array_merge($a, $b));
echo '两个数组索引存在相同数字:' . php_EOL;
var_dump(array_merge($a, $c));
返回的结果:
两个数组索引存在相同的:
array(4) {
["a"]=>
string(13) "字母键值3"
[0]=>
string(13) "数字键值1"
[1]=>
string(13) "数字键值2"
["b"]=>
string(13) "字母键值4"
}
两个数组索引存在相同数字:
array(6) {
["a"]=>
string(13) "字母键值1"
[0]=>
string(13) "数字键值1"
[1]=>
string(13) "数字键值2"
["b"]=>
string(13) "字母键值2"
[2]=>
string(13) "数字键值1"
[3]=>
string(13) "数字键值2"
}
踩坑总结
array_merge
- 对于存在相同的字符键值的数组,后面的键值会覆盖前面的键值
- 而对于存在相同数字键值的数组,则会将后面的键值追加在前面的数字键值之后
+=操作
- 对于存在相同的键值来说,不论是字符或是数字,都会舍弃后面数组的键值