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));
运行它:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2020-07-21 LeetCode 1313. 解压缩编码列表