PHP array_merge 基础用法回顾
array_merge 是 PHP 中用于合并一个或多个数组的内置函数,函数会将多个数组的元素合并到一个新数组中返回。它的基础语法非常简单,接收至少一个数组作为参数,后续可以传入多个数组参数。

基础合并示例
当两个数组都是索引数组时,array_merge 会重新索引所有元素,将后一个数组的元素追加到前一个数组的末尾。
<?php $arr1 = [1, 2, 3]; $arr2 = [4, 5, 6]; $result = array_merge($arr1, $arr2); print_r($result); // 输出结果:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) ?>
面试高频问题一:关联数组合并时键名重复怎么处理
这是面试中最常被问到的问题之一,很多开发者会误以为关联数组合并时也会重新索引,实际上规则完全不同。当多个关联数组存在相同的字符串键名时,后面数组的值会覆盖前面数组的对应值。
<?php $arr1 = ['name' => '张三', 'age' => 20]; $arr2 = ['age' => 25, 'city' => '北京']; $result = array_merge($arr1, $arr2); print_r($result); // 输出结果:Array ( [name] => 张三 [age] => 25 [city] => 北京 ) ?>
可以看到 arr2 中的 age 值覆盖了 arr1 中的 age 值,同时新增的 city 键也被合并到结果数组中。
面试高频问题二:传入非数组参数会返回什么
面试中经常会考察参数类型的边界情况,array_merge 对非数组参数的处理规则是:如果传入的参数是 null,会被当作空数组处理;如果传入其他非数组类型,函数会返回 null 并抛出警告。
<?php // 传入 null 参数 $arr1 = [1, 2]; $result1 = array_merge($arr1, null); print_r($result1); // 输出结果:Array ( [0] => 1 [1] => 2 ) // 传入非数组非 null 参数 $result2 = array_merge($arr1, 'test'); // 会抛出警告:array_merge(): Argument #2 is not an array // 返回结果:null ?>
面试高频问题三:索引数组和关联数组混合合并的规则
当合并的数组中既有索引数组元素又有关联数组元素时,规则是分开处理的:字符串键名遵循覆盖规则,数字索引会重新排序,不会保留原有的索引值。
<?php $arr1 = [0 => 'a', 1 => 'b', 'name' => 'test']; $arr2 = [2 => 'c', 'name' => 'new_test']; $result = array_merge($arr1, $arr2); print_r($result); // 输出结果:Array ( [0] => a [1] => b [name] => new_test [2] => c ) ?>
可以看到原有的数字索引 0、1、2 被重新排序为 0、1、2,字符串键名 name 被后面的数组覆盖。
面试高频问题四:array_merge 和数组合并运算符 + 有什么区别
很多开发者会混淆这两个合并方式,面试中也经常对比考察。两者的核心区别有两点:一是键名重复时的处理规则不同,二是索引数组的处理逻辑不同。
| 对比项 | array_merge | 数组合并运算符 + |
|---|---|---|
| 字符串键名重复 | 后面的值覆盖前面的值 | 前面的值保留,后面的值被忽略 |
| 数字索引处理 | 重新索引所有元素 | 保留原有索引,后面数组的相同索引元素被忽略 |
| 非数组参数处理 | null 当作空数组,其他非数组返回 null | 非数组参数会报错 |
<?php $arr1 = ['a' => 1, 0 => 'x']; $arr2 = ['a' => 2, 0 => 'y', 1 => 'z']; // array_merge 结果 $mergeResult = array_merge($arr1, $arr2); print_r($mergeResult); // 输出:Array ( [a] => 2 [0] => x [1] => y [2] => z ) // + 运算符结果 $plusResult = $arr1 + $arr2; print_r($plusResult); // 输出:Array ( [a] => 1 [0] => x [1] => z ) ?>
面试高频问题五:合并空数组的结果是什么
如果只传入一个空数组,array_merge 会直接返回这个空数组;如果传入多个空数组,会返回一个空数组。这个场景虽然简单,但面试中也偶尔会被问到。
<?php $arr1 = []; $arr2 = []; $result1 = array_merge($arr1); print_r($result1); // 输出:Array ( ) $result2 = array_merge($arr1, $arr2); print_r($result2); // 输出:Array ( ) ?>
总结
PHP array_merge 的面试考点主要集中在合并规则、参数边界处理、和其他合并方式的区别这几个方面。掌握不同场景下键名的处理逻辑、参数类型的处理规则,就能应对大部分相关的面试问题。实际开发中也需要根据需求选择合适的数组合并方式,避免出现不符合预期的合并结果。
PHParray_merge数组合并面试考点修改时间:2026-06-21 16:27:30