PHP array_merge() 函数
在 PHP 中,array_merge()
函数用于将两个或多个数组合并成一个数组。它是处理数组操作的常用函数,广泛应用于配置合并、数据整合等场景。以下是对 array_merge()
函数的详细介绍,包括定义、语法、参数、返回值、示例和注意事项,适合初学者快速上手。
1. 定义
array_merge()
:将多个数组合并为一个数组。如果存在相同的键名,后面数组的值会覆盖前面数组的值(对于数字键会追加)。- 所属库:PHP 内置函数,无需额外引入。
- 用途:合并配置数组、整合数据集合、追加数组元素。
2. 语法
array array_merge(array ...$arrays)
- 参数:
$arrays
:一个或多个要合并的数组(可变参数,PHP 5.6+ 支持)。- 返回值:合并后的新数组。
3. 行为规则
- 数字键:
- 数字索引的键(0, 1, 2, …)会被重新索引,元素按顺序追加。
- 字符串键:
- 如果多个数组有相同的字符串键,后面的值会覆盖前面的值。
- 类型处理:
- 合并后的数组保留原始类型(数字、字符串等)。
- 空数组:
- 如果传入空数组,返回空数组。
- 如果只传入一个数组,返回该数组的副本。
4. 基本用法
4.1 合并两个数组(数字键)
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
$result = array_merge($array1, $array2);
print_r($result);
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
- 说明:数字键被重新索引,元素按顺序追加。
4.2 合并数组(字符串键)
$array1 = ['name' => 'Alice', 'age' => 20];
$array2 = ['age' => 21, 'city' => 'New York'];
$result = array_merge($array1, $array2);
print_r($result);
输出:
Array
(
[name] => Alice
[age] => 21
[city] => New York
)
- 说明:
age
键在$array2
中的值(21)覆盖了$array1
中的值(20)。
4.3 合并多个数组
$array1 = ['a' => 1];
$array2 = ['b' => 2];
$array3 = ['c' => 3];
$result = array_merge($array1, $array2, $array3);
print_r($result);
输出:
Array
(
[a] => 1
[b] => 2
[c] => 3
)
4.4 合并空数组
$array1 = [];
$array2 = [1, 2, 3];
$result = array_merge($array1, $array2);
print_r($result);
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
5. 常见使用场景
- 合并配置:
$defaultConfig = ['theme' => 'light', 'lang' => 'en'];
$userConfig = ['lang' => 'fr', 'font' => 'Arial'];
$config = array_merge($defaultConfig, $userConfig);
print_r($config);
输出:
Array
(
[theme] => light
[lang] => fr
[font] => Arial
)
- 整合数据:
$users1 = ['Alice', 'Bob'];
$users2 = ['Charlie'];
$allUsers = array_merge($users1, $users2);
print_r($allUsers);
输出:
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
- 处理动态数组:
$arrays = [
['name' => 'Alice'],
['age' => 20],
['city' => 'New York']
];
$result = array_merge(...$arrays); // PHP 7.4+ 展开运算符
print_r($result);
输出:
Array
(
[name] => Alice
[age] => 20
[city] => New York
)
6. 注意事项
- 键名覆盖:
- 字符串键:后数组的值覆盖前数组的同名键。
- 数字键:重新索引,不会覆盖。
- 性能:
array_merge()
适合中小型数组,处理大型数组时可能有性能开销。- 比直接使用
+
运算符更可靠(+
保留第一个数组的键值)。 - 与
array_merge_recursive()
的区别: array_merge()
:同名字符串键直接覆盖。array_merge_recursive()
:同名键合并为子数组。
$array1 = ['key' => 'value1'];
$array2 = ['key' => 'value2'];
$result = array_merge_recursive($array1, $array2);
print_r($result);
输出:
Array
(
[key] => Array
(
[0] => value1
[1] => value2
)
)
- 与
+
运算符的区别: +
保留第一个数组的键值,忽略后续数组的同名键。
$array1 = ['key' => 'value1'];
$array2 = ['key' => 'value2'];
$result = $array1 + $array2;
print_r($result);
输出:
Array
(
[key] => value1
)
- 空参数:
- 如果不传入数组,PHP 7.4+ 会抛出警告。
- PHP 8.0+ 要求至少一个数组。
7. 高级示例
7.1 合并嵌套数组
$array1 = ['user' => ['name' => 'Alice', 'age' => 20]];
$array2 = ['user' => ['city' => 'New York']];
$result = array_merge_recursive($array1, $array2);
print_r($result);
输出:
Array
(
[user] => Array
(
[name] => Alice
[age] => 20
[city] => New York
)
)
7.2 动态合并多数组
function combineArrays(...$arrays) {
return array_merge(...$arrays);
}
$result = combineArrays(
['a' => 1],
['b' => 2],
['a' => 3]
);
print_r($result);
输出:
Array
(
[a] => 3
[b] => 2
)
8. 总结
array_merge()
:将多个数组合并为一个,字符串键覆盖,数字键追加。- 关键点:
- 适合合并配置、整合数据。
- 字符串键:后值覆盖前值。
- 数字键:重新索引,顺序追加。
- 推荐实践:
- 使用
array_merge_recursive()
处理嵌套数组。 - 避免使用
+
运算符合并数组(行为不一致)。 - 检查输入数组,防止空参数警告。
- 适用场景:配置管理、数据整合、动态数组处理。
如果你需要更具体的示例(如处理复杂嵌套数组、结合框架使用)或对其他 PHP 函数的说明,请告诉我!