ZetCode

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 结合了主题和字体设置,同时保留了嵌套结构。这演示了深度合并。

最佳实践

来源

PHP array_merge_recursive 文档

本教程介绍了 PHP array_merge_recursive 函数,并提供了实际示例,展示了它与各种数组类型的递归合并行为。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 数组函数