PHP array_replace_recursive 函数
最后修改于 2025 年 3 月 13 日
PHP array_replace_recursive 函数通过递归地用后面的数组替换前面的数组中的值来合并数组。它处理嵌套数组。
基本定义
array_replace_recursive 递归地用后续数组中的值替换第一个数组中的值。如果一个键存在于多个数组中,则最后一个值获胜。
语法:array_replace_recursive(array $array1, array ...$arrays): array。它接受一个或多个数组并返回合并后的数组。非数组值将被直接替换。
基本 array_replace_recursive 示例
这演示了两个具有一些重叠键的数组的简单合并。
<?php
$defaults = [
'settings' => [
'debug' => false,
'log_level' => 'warning'
],
'features' => ['search', 'filter']
];
$custom = [
'settings' => [
'debug' => true
],
'features' => ['export']
];
$result = array_replace_recursive($defaults, $custom);
print_r($result);
这会将默认设置与自定义设置合并。debug 设置被替换,而其他值保持不变。features 数组被完全替换(非递归)。
深层嵌套数组替换
展示了嵌套数组如何递归合并,而标量值被替换。
<?php
$config1 = [
'database' => [
'host' => 'localhost',
'credentials' => [
'user' => 'admin',
'pass' => 'secret'
]
]
];
$config2 = [
'database' => [
'credentials' => [
'pass' => 'newpass'
],
'port' => 3306
]
];
$merged = array_replace_recursive($config1, $config2);
print_r($merged);
密码被递归更新,同时保留了其他凭据。新端口被添加,原始主机保持不变。这显示了深度合并行为。
多个数组替换
演示了合并两个以上具有重叠和唯一键的数组。
<?php
$base = [
'colors' => ['red', 'green'],
'sizes' => ['S', 'M']
];
$update1 = [
'colors' => ['blue'],
'sizes' => ['L']
];
$update2 = [
'colors' => ['yellow'],
'shapes' => ['circle']
];
$result = array_replace_recursive($base, $update1, $update2);
print_r($result);
最终的 colors 数组只包含来自最后一次更新的 'yellow'。Sizes 数组显示来自 update1 的 'L'。Shapes 是从 update2 添加的。后面的数组优先。
混合数组和标量值
展示了标量值如何被替换,而数组如何被递归合并。
<?php
$original = [
'title' => 'Default Title',
'meta' => [
'keywords' => ['php', 'tutorial'],
'description' => 'Default description'
]
];
$changes = [
'title' => 'New Title',
'meta' => [
'description' => 'Updated description'
]
];
$updated = array_replace_recursive($original, $changes);
print_r($updated);
title 标量值被完全替换。Meta 数组被递归合并,description 被更新,而 keywords 保持不变。这显示了混合行为。
保留数字键
演示了数字键与字符串键的处理方式不同。
<?php
$array1 = [
'a' => ['apple', 'apricot'],
0 => ['zero']
];
$array2 = [
'a' => ['banana'],
0 => ['one'],
1 => ['new']
];
$result = array_replace_recursive($array1, $array2);
print_r($result);
字符串键 'a' 被递归合并,新的水果替换了旧的。数字键被视为不同的 - 0 被完全替换。新键 1 从 array2 添加。
最佳实践
- 配置合并: 非常适合将配置文件与默认设置结合起来。
- 嵌套结构: 在处理深度嵌套数组时使用。
- 键类型: 请记住数字键会被替换,而不是合并。
- 性能: 对于简单的数组,array_replace 可能更快。
来源
PHP array_replace_recursive 文档
本教程通过实际示例介绍了 PHP array_replace_recursive 函数,展示了它在递归数组合并场景中的用法。
作者
列出 所有 PHP 数组函数。