在 PHP 中,array_merge_recursive()
函数用于递归地合并两个或多个数组。与 array_merge()
不同,array_merge_recursive()
会递归地处理数组中的数组元素,而不是简单地覆盖。
1. 基本用法
array_merge_recursive()
的基本语法如下:
array_merge_recursive(array $array1, array $array2, ...): array
示例代码
<?php$array1 = [ 'name' => 'John', 'hobbies' => ['reading', 'coding'],];$array2 = [ 'name' => 'Jane', 'hobbies' => ['swimming'],];$result = array_merge_recursive($array1, $array2);print_r($result);?>
输出
Array ( [name] => Array ( [0] => John [1] => Jane ) [hobbies] => Array ( [0] => reading [1] => coding [2] => swimming ) )
2. 递归合并规则
array_merge_recursive()
的合并规则如下:
如果两个数组的键相同且值都是数组,则递归合并这两个数组。
如果两个数组的键相同但值不是数组,则将值合并为一个数组。
示例代码
<?php$array1 = [ 'user' => [ 'name' => 'John', 'age' => 30, ],];$array2 = [ 'user' => [ 'name' => 'Jane', 'hobbies' => ['reading', 'coding'], ],];$result = array_merge_recursive($array1, $array2);print_r($result);?>
输出
Array ( [user] => Array ( [name] => Array ( [0] => John [1] => Jane ) [age] => 30 [hobbies] => Array ( [0] => reading [1] => coding ) ) )
3. 处理非数组值
如果两个数组的键相同但值不是数组,array_merge_recursive()
会将值合并为一个数组。
示例代码
<?php$array1 = [ 'name' => 'John',];$array2 = [ 'name' => 'Jane',];$result = array_merge_recursive($array1, $array2);print_r($result);?>
输出
Array ( [name] => Array ( [0] => John [1] => Jane ) )
4. 多维数组合并
array_merge_recursive()
可以处理多维数组的递归合并。
示例代码
<?php$array1 = [ 'users' => [ 'John' => [ 'age' => 30, 'hobbies' => ['reading', 'coding'], ], ],];$array2 = [ 'users' => [ 'Jane' => [ 'age' => 25, 'hobbies' => ['swimming'], ], ],];$result = array_merge_recursive($array1, $array2);print_r($result);?>
输出
Array ( [users] => Array ( [John] => Array ( [age] => 30 [hobbies] => Array ( [0] => reading [1] => coding ) ) [Jane] => Array ( [age] => 25 [hobbies] => Array ( [0] => swimming ) ) ) )
5. 注意事项
键冲突:
如果两个数组的键相同且值都是数组,则递归合并。
如果两个数组的键相同但值不是数组,则将值合并为一个数组。
性能:
对于非常大的数组,递归合并可能会导致性能问题。
覆盖行为:
如果需要覆盖相同键的值,而不是合并,可以使用
array_replace_recursive()
。
6. 与 array_merge()
的区别
array_merge()
:如果两个数组的键相同,后面的数组值会覆盖前面的数组值。
不会递归处理数组中的数组元素。
array_merge_recursive()
:如果两个数组的键相同且值都是数组,则递归合并。
如果两个数组的键相同但值不是数组,则将值合并为一个数组。
示例代码
<?php$array1 = [ 'name' => 'John', 'hobbies' => ['reading', 'coding'],];$array2 = [ 'name' => 'Jane', 'hobbies' => ['swimming'],];$resultMerge = array_merge($array1, $array2);$resultMergeRecursive = array_merge_recursive($array1, $array2);echo "array_merge():\n";print_r($resultMerge);echo "array_merge_recursive():\n";print_r($resultMergeRecursive);?>
输出
array_merge(): Array ( [name] => Jane [hobbies] => Array ( [0] => swimming ) ) array_merge_recursive(): Array ( [name] => Array ( [0] => John [1] => Jane ) [hobbies] => Array ( [0] => reading [1] => coding [2] => swimming ) )
7. 总结
函数 | 行为 |
---|---|
array_merge() | 覆盖相同键的值,不递归处理数组元素 |
array_merge_recursive() | 递归合并相同键的值,合并非数组值为数组 |
根据具体需求选择合适的函数:
如果需要覆盖相同键的值,使用
array_merge()
。如果需要递归合并相同键的值,使用
array_merge_recursive()
。
本文关键词: php array merge recursive 数组 合并
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。