$arr1 + $arr2
键名出现重复,不管是数字还是字符,统一使用首次出现的,丢弃后面出现的(前面覆盖后面)。
array_merge(arr1,arr2)
- 如果是字符,则使用后面出现的,丢弃前面出现的(后面覆盖前面)
- 如果是数字则全部保留。
array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组
索引数组
$arr1 = [1 => 'one', 3 => 'three'];
$arr2 = [1 => 'new one', 6 => 'six'];
$result1 = array_merge($arr1, $arr2);
$result2 = $arr1 + $arr2;
$result = array_merge_recursive($arr1, $arr2);
dd($result1);
dd($result2);
dd($result);
//output
$result1:
Array
(
[0] => one
[1] => three
[2] => new one
[3] => six
)
$result2:
Array
(
[1] => one
[3] => three
[6] => six
)
$result
Array
(
[0] => one
[1] => three
[2] => new one
[3] => six
)
关联数组
$arr3 = ['name' => '张三', 'age' => 21];
$arr4 = ['name' => '李四', 'age' => 22];
$result3 = array_merge($arr3, $arr4);
$result4 = $arr3 + $arr4;
$result5 = array_merge_recursive($arr3, $arr4);
dd($result3);
dd($result4);
dd($result5);
//output
//result3:
Array
(
[name] => 李四
[age] => 22
)
//result4:
Array
(
[name] => 张三
[age] => 21
)
//result5:
array (
'name' =>
array (
0 => '张三',
1 => '李四',
),
'age' =>
array (
0 => 21,
1 => 22,
),
)
效率分析in_array、array_key_exists和isset
isset的效率最高,在数据量很大时isset会明显快于array_key_exists,在数据很小时isset与array_key_exists效率没有太多的差别;而in_array效率最低;