PHP 函数 array_merge_recursive 的坑

本文详细解析PHP中array_merge_recursive函数的特性,特别是在处理相同键名时的行为区别于array_merge函数。通过实例演示,展示了当键名为数值或数值型字符串时,该函数如何避免值的覆盖而选择追加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该函数与 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" 
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值