在 PHP 中,数组合并是常见的操作,特别是在处理数据集合时。PHP 提供了几种函数来合并数组,根据具体需求可以选择合适的函数来实现数组合并。

目录

  1. array_merge()
  2. array_merge_recursive()
  3. array_replace()
  4. array_replace_recursive()
  5. array_merge()array_merge_recursive() 的区别
  6. 总结

1. array_merge()

array_merge() 用于将一个或多个数组合并为一个数组。如果数组中有相同的键,后面的数组会覆盖前面的数组中的相同键值。对于索引数组,合并时会保留原数组的索引,并自动为新数组分配新的索引。

语法:

array_merge(array $array1, array $array2, ...): array
  • $array1, $array2,...:需要合并的数组。

示例:

<?php
$array1 = ['a' => 'apple', 'b' => 'banana'];
$array2 = ['b' => 'blueberry', 'c' => 'cherry'];

$result = array_merge($array1, $array2);
print_r($result);
?>

输出:

Array
(
    [a] => apple
    [b] => blueberry
    [c] => cherry
)

解释:

  • 'b' 在两个数组中都有,在合并时后面数组的 'b' => 'blueberry' 会覆盖前面数组的 'b' => 'banana'
  • 索引数组的元素会自动按顺序重新索引。

2. array_merge_recursive()

array_merge_recursive() 函数与 array_merge() 类似,但它在合并时,如果数组中有相同的键,它会将这些键的值合并为一个数组,而不是直接覆盖。

语法:

array_merge_recursive(array $array1, array $array2, ...): array

示例:

<?php
$array1 = ['a' => 'apple', 'b' => 'banana'];
$array2 = ['b' => 'blueberry', 'c' => 'cherry'];

$result = array_merge_recursive($array1, $array2);
print_r($result);
?>

输出:

Array
(
    [a] => apple
    [b] => Array
        (
            [0] => banana
            [1] => blueberry
        )
    [c] => cherry
)

解释:

  • 'b' 在两个数组中都有,但 array_merge_recursive() 不会覆盖它们,而是将它们合并成一个数组,形成 ['b' => ['banana', 'blueberry']]

3. array_replace()

array_replace() 用于将一个数组的元素替换为另一个数组中对应的元素。它类似于 array_merge(),但它会替换掉原数组中的相同键值,而不仅仅是合并。

语法:

array_replace(array $array1, array $array2, ...): array
  • $array1:目标数组,后面的数组会替换它的元素。
  • $array2:源数组,替换目标数组中对应的键。

示例:

<?php
$array1 = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
$array2 = ['b' => 'blueberry', 'd' => 'date'];

$result = array_replace($array1, $array2);
print_r($result);
?>

输出:

Array
(
    [a] => apple
    [b] => blueberry
    [c] => cherry
    [d] => date
)

解释:

  • 'b' 在两个数组中都有,array_replace() 会用 array2 中的值 'blueberry' 替换 array1'banana'
  • 新的键 'd' 被添加到结果数组中。

4. array_replace_recursive()

array_replace_recursive() 类似于 array_replace(),但是它不仅替换数组的值,还会递归地替换子数组中的值。这使得它非常适合嵌套数组的合并。

语法:

array_replace_recursive(array $array1, array $array2, ...): array

示例:

<?php
$array1 = ['a' => 'apple', 'b' => ['x' => 'banana', 'y' => 'cherry']];
$array2 = ['b' => ['x' => 'blueberry'], 'c' => 'date'];

$result = array_replace_recursive($array1, $array2);
print_r($result);
?>

输出:

Array
(
    [a] => apple
    [b] => Array
        (
            [x] => blueberry
            [y] => cherry
        )
    [c] => date
)

解释:

  • 在数组 'b' 中,array_replace_recursive() 会递归地替换 'x' => 'banana''x' => 'blueberry',但 'y' => 'cherry' 保留不变。

5. array_merge()array_merge_recursive() 的区别

特性 array_merge() array_merge_recursive()
键名相同时 后面的值会覆盖前面的值 相同键的值会合并成一个数组
适用场景 合并两个或多个数组,并且希望覆盖相同键的值 合并数组并希望相同键的值不丢失,尤其是处理多维数组时
结果 返回一个平铺的一维数组 返回一个递归合并后的数组

示例:

$array1 = ['a' => 'apple', 'b' => 'banana'];
$array2 = ['b' => 'blueberry', 'c' => 'cherry'];

// 使用 array_merge()
$result1 = array_merge($array1, $array2); // 返回键 'b' 被覆盖
print_r($result1);

// 使用 array_merge_recursive()
$result2 = array_merge_recursive($array1, $array2); // 返回键 'b' 的值合并为数组
print_r($result2);

总结

  • array_merge():将数组合并并返回一个新的数组,相同的键会被后面的数组覆盖。
  • array_merge_recursive():递归地合并数组,相同键的值会合并成一个数组。
  • array_replace():用后面的数组的值替换前面数组中相同键的值。
  • array_replace_recursive():递归地替换数组的值,适用于处理嵌套数组。

这些函数提供了灵活的方式来合并和替换数组,选择合适的函数取决于你是否希望递归合并,是否希望覆盖值,或者需要合并多维数组。