在 PHP 中,数组合并是常见的操作,特别是在处理数据集合时。PHP 提供了几种函数来合并数组,根据具体需求可以选择合适的函数来实现数组合并。
目录
array_merge()
array_merge_recursive()
array_replace()
array_replace_recursive()
array_merge()
与array_merge_recursive()
的区别- 总结
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()
:递归地替换数组的值,适用于处理嵌套数组。
这些函数提供了灵活的方式来合并和替换数组,选择合适的函数取决于你是否希望递归合并,是否希望覆盖值,或者需要合并多维数组。