PHP内置函数array_merge的合并机制。内容涵盖数字索引数组的重新索引规则、字符串键名数组的覆盖逻辑,以及null值处理等核心知识点,助力高效处理数组合并操作。
引言
在PHP开发过程中,数组合并是高频操作。array_merge函数虽然常用,但其内部合并逻辑存在特定的细节差异。掌握这些规则,能够有效避免因数据结构不一致导致的程序异常。

📌 合并规则
1️⃣ 数字索引数组(Indexed Arrays)
-
规则: 当传入的数组包含数字键名时,array_merge会将所有元素追加到结果数组中,并对数字键名进行重新索引(从0开始递增)。
-
示例:
$a = [0 => 'A', 1 => 'B']; $b = [0 => 'C', 1 => 'D']; $result = array_merge($a, $b); // 输出: [0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D']
2️⃣ 字符串键名数组(Associative Arrays)
-
规则: 当数组包含字符串键名时,后面数组的值会覆盖前面数组中相同键名的值。
-
示例:
$a = ['color' => 'red', 'size' => 'M']; $b = ['color' => 'blue', 'weight' => '10kg']; $result = array_merge($a, $b); // 输出: ['color' => 'blue', 'size' => 'M', 'weight' => '10kg']
3️⃣ 特殊情况处理
-
Null值处理: 如果传入的参数不是数组(如null),array_merge会将其视为一个空数组,不会触发错误,但可能会产生警告(取决于PHP版本配置)。
-
类型转换: 包含字符串数字键名的数组(如
'1' => 'value')会被转换为数字索引,并参与重新索引。
⚠️ 注意事项
-
性能考量: 合并超大数组时,由于需要重新创建索引,会消耗较多内存。
-
替代方案: 若需保留原数字键名,建议使用数组加号(
+)运算符,但需注意加号运算符是“前面覆盖后面”,与array_merge逻辑相反。
结尾
理解array_merge的底层合并逻辑,是编写健壮PHP代码的基础。建议在实际开发中根据业务需求(是否需要保留键名或重新索引)选择最合适的合并方案。

