该函数与 array_merge() 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。
官方介绍也没有特别标注,就简单一句话,很容被忽略
however, the arrays have the same numeric key, the later value will not overwrite the original value, but will be appended.
这里是个很大的坑啊
意思是,如果array_merge_recursive 合并的数组,键值为数值,或者数值型字符串(例:‘1’)的时候,array_merge_recursive不会合并这个键的值。
$arrayOne = [1=>['v11'],'2'=>['v21'],'k1'=>['v31']];
$arrayTwo = [1=>['v12'],'2'=>['v22'],'k1'=>['v32']];
var_dump(array_merge_recursive($arrayOne, $arrayTwo));
//输出
array(5) {
[0]=> array(1) {
[0]=> string(3) "v11"
}
[1]=> array(1) {
[0]=> string(3) "v21"
}
["k1"]=> array(2) {
[0]=> string(3) "v31"
[1]=> string(3) "v32"
}
[2]=> array(1) {
[0]=> string(3) "v12"
}
[3]=> array(1) {
[0]=> string(3) "v22"
}
}