PHP array_merge_recursive 函数
最后修改于 2025 年 3 月 13 日
PHP array_merge_recursive 函数递归地合并两个或多个数组。与 array_merge 不同,它通过创建值的数组来处理重复的键。
基本定义
array_merge_recursive 函数在保留键的同时合并数组。当键匹配时,值被合并成一个数组,而不是被覆盖。
语法:array_merge_recursive(array ...$arrays): array。它接受多个数组参数并返回合并后的结果。字符串键被合并,数字键被重新编号。
array_merge_recursive 的基本示例
这演示了具有字符串键的两个数组的简单合并。
basic_merge.php
<?php $array1 = ['color' => 'red', 'size' => 'small']; $array2 = ['color' => 'blue', 'shape' => 'round']; $result = array_merge_recursive($array1, $array2); print_r($result);
输出显示 'color' 键现在在一个数组中包含两个值。其他键正常合并。这保留了来自两个数组的所有值。
匹配的数字键
当数组具有匹配的数字键时,值将使用新的索引附加。
numeric_keys.php
<?php $array1 = [0 => 'apple', 1 => 'banana']; $array2 = [0 => 'orange', 1 => 'pear']; $result = array_merge_recursive($array1, $array2); print_r($result);
数字键按顺序重新编号。输出包含所有四个水果,索引从 0 到 3。这与字符串键的行为不同。
多维数组
该函数递归地合并嵌套数组,在每个级别合并值。
multidimensional.php
<?php $array1 = ['fruits' => ['apple', 'banana'], 'vegetables' => ['carrot']]; $array2 = ['fruits' => ['orange'], 'vegetables' => ['celery']]; $result = array_merge_recursive($array1, $array2); print_r($result);
'fruits' 和 'vegetables' 子数组都被合并。结果包含来自两个数组的所有水果和蔬菜,分别位于其各自的类别中。
混合键类型
具有字符串键和数字键的数组演示了不同的合并行为。
mixed_keys.php
<?php $array1 = ['name' => 'John', 0 => 'admin']; $array2 = ['name' => 'Doe', 0 => 'user']; $result = array_merge_recursive($array1, $array2); print_r($result);
'name' 值被组合成一个数组,而数字索引被重新编号。这显示了不同类型的键如何被单独处理。
深度递归合并
该函数处理多层嵌套,在每个深度进行合并。
deep_merge.php
<?php $array1 = ['user' => ['name' => 'Alice', 'prefs' => ['theme' => 'dark']]]; $array2 = ['user' => ['email' => 'alice@example.com', 'prefs' => ['font' => 'arial']]]; $result = array_merge_recursive($array1, $array2); print_r($result);
用户数据在所有级别都被合并。Preferences 结合了主题和字体设置,同时保留了嵌套结构。这演示了深度合并。
最佳实践
- 键冲突: 了解不同类型的键如何合并。
- 性能: 合并大型结构时,考虑深度。
- 备选方案: 使用 array_replace_recursive 进行覆盖。
- 调试: 使用复杂的合并仔细检查结果。
来源
本教程介绍了 PHP array_merge_recursive 函数,并提供了实际示例,展示了它与各种数组类型的递归合并行为。
作者
列出 所有 PHP 数组函数。