php合并两个数组有几种方式,试比较它们的异同
2025-09-15 23:24
PHP
135
0
0
0
标题录入
封面图
在 PHP 中,合并两个数组有多种方式,每种方法在功能和使用场景上略有不同。下面将介绍常见的几种合并数组的方式,并比较它们的异同。 --- ## ✅ 一、`array_merge()` 函数 ### 语法: ```php array_merge(array1, array2, ...) ``` ### 功能: - 合并一个或多个数组。 - 如果键名是数字(索引),则会重新编号。 - 如果键名是字符串(关联键),则保留原始键名,后一个数组的值会覆盖前一个。 ### 示例: ```php $array1 = [1, 2, 3]; $array2 = [4, 5, 6]; $result = array_merge($array1, $array2); // 输出: [0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6] ``` ### 关联数组示例: ```php $array1 = ['a' => 1, 'b' => 2]; $array2 = ['b' => 3, 'c' => 4]; $result = array_merge($array1, $array2); // 输出: ['a' => 1, 'b' => 3, 'c' => 4] ``` --- ## ✅ 二、`+` 运算符(数组加法) ### 语法: ```php $array1 + $array2 ``` ### 功能: - 合并两个数组。 - **仅适用于关联数组**,不适用于索引数组。 - 如果键名相同,**保留第一个数组的值**,第二个数组的值会被忽略。 ### 示例: ```php $array1 = ['a' => 1, 'b' => 2]; $array2 = ['b' => 3, 'c' => 4]; $result = $array1 + $array2; // 输出: ['a' => 1, 'b' => 2, 'c' => 4] ``` > 注意:对于索引数组(如 `[1, 2, 3]`),`+` 的行为与 `array_merge()` 不同,它不会重新编号,而是按原顺序保留。 --- ## ✅ 三、`array_combine()` 函数(用于创建新数组) ### 语法: ```php array_combine(keys, values) ``` ### 功能: - 将两个数组组合成一个新数组,第一个数组作为键,第二个作为值。 - 通常用于从两个数组中生成关联数组。 ### 示例: ```php $keys = ['a', 'b', 'c']; $values = [1, 2, 3]; $result = array_combine($keys, $values); // 输出: ['a' => 1, 'b' => 2, 'c' => 3] ``` > 注意:`array_combine()` 并不是“合并”两个数组,而是“组合”成一个新的数组。 --- ## ✅ 四、使用 `[]` 操作符(PHP 7.4+ 支持) ### 语法: ```php $array = [...$array1, ...$array2]; ``` ### 功能: - 使用扩展运算符(spread operator)合并数组。 - 可以合并任意数量的数组。 - 适用于索引数组和关联数组。 ### 示例: ```php $array1 = [1, 2, 3]; $array2 = [4, 5, 6]; $result = [...$array1, ...$array2]; // 输出: [1, 2, 3, 4, 5, 6] ``` > 对于关联数组: ```php $array1 = ['a' => 1, 'b' => 2]; $array2 = ['b' => 3, 'c' => 4]; $result = [...$array1, ...$array2]; // 输出: ['a' => 1, 'b' => 3, 'c' => 4] ``` --- ## ✅ 五、`array_merge_recursive()` 函数 ### 语法: ```php array_merge_recursive(array1, array2, ...) ``` ### 功能: - 合并多个数组,**递归地合并嵌套数组**。 - 如果键名相同,且值是数组,则递归合并;否则用后一个数组的值覆盖前一个。 ### 示例: ```php $array1 = ['a' => ['x' => 1]]; $array2 = ['a' => ['y' => 2]]; $result = array_merge_recursive($array1, $array2); // 输出: ['a' => ['x' => 1, 'y' => 2]] ``` --- ## ✅ 六、自定义函数(手动合并) 可以编写自定义函数来实现更复杂的逻辑,例如: ```php function mergeArrays($arr1, $arr2) { $result = $arr1; foreach ($arr2 as $key => $value) { if (is_array($value) && isset($result[$key]) && is_array($result[$key])) { $result[$key] = array_merge($result[$key], $value); } else { $result[$key] = $value; } } return $result; } ``` --- ## 📊 异同比较表 | 方法 | 是否支持索引数组 | 是否支持关联数组 | 键冲突处理 | 递归合并 | 重编号索引 | 常用场景 | |--------------------|------------------|------------------|------------|----------|-------------|------------------------------| | `array_merge()` | ✅ | ✅ | 覆盖 | ❌ | ✅ | 简单合并索引/关联数组 | | `+` 运算符 | ❌ | ✅ | 保留第一个 | ❌ | ❌ | 关联数组合并,保留第一个值 | | `array_combine()` | ❌ | ✅ | - | ❌ | - | 从两个数组创建关联数组 | | `...` 扩展运算符 | ✅ | ✅ | 覆盖 | ❌ | ✅ | 简洁、现代写法 | | `array_merge_recursive()` | ✅ | ✅ | 覆盖 | ✅ | ✅ | 合并嵌套数组 | | 自定义函数 | ✅ | ✅ | 自定义 | ✅ | ✅ | 高度定制化逻辑 | --- ## ✅ 总结 | 场景 | 推荐方法 | |------------------------------|----------------------| | 合并索引数组 | `array_merge()` 或 `...` | | 合并关联数组(保留第一个值) | `+` 运算符 | | 合并关联数组(覆盖值) | `array_merge()` | | 合并嵌套数组 | `array_merge_recursive()` | | 现代简洁写法 | `...` 扩展运算符 | 如果你有特定的数组结构(如嵌套、关联等),可以根据实际需求选择最合适的方法。
上一篇:
php 接口安全
下一篇:
php写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制、八进制、十进制、十六进制数字)
标题录入,一次不能超过6条
怎么证明自己的选择是对的?
T:0.013544s,M:130.98 KB
返回顶部
留言
留言
评论