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 函数的说明,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注