最直接合并数组的方法是使用array_merge()函数,它能将多个数组合并为新数组,数字键重新索引,字符串键后值覆盖前值。

PHP中合并两个数组,最直接也是最常用的方法就是使用
array_merge()
array_merge()
<?php // 示例1: 合并两个数字索引数组 $fruits1 = ['apple', 'banana']; $fruits2 = ['orange', 'grape']; $mergedFruits = array_merge($fruits1, $fruits2); print_r($mergedFruits); // 输出: Array ( [0] => apple [1] => banana [2] => orange [3] => grape ) // 观察:数字键会被重新索引,从0开始递增。 echo "\n"; // 示例2: 合并两个关联数组 $user1 = ['name' => 'Alice', 'age' => 30]; $user2 = ['city' => 'New York', 'age' => 31]; $mergedUser = array_merge($user1, $user2); print_r($mergedUser); // 输出: Array ( [name] => Alice [age] => 31 [city] => New York ) // 观察:对于相同的字符串键(如'age'),后一个数组的值会覆盖前一个数组的值。 echo "\n"; // 示例3: 合并多个数组 $arrA = [1, 2]; $arrB = [3, 'key' => 'value']; $arrC = [4, 5, 'key' => 'another_value']; $mergedAll = array_merge($arrA, $arrB, $arrC); print_r($mergedAll); // 输出: Array ( [0] => 1 [1] => 2 [2] => 3 [key] => another_value [3] => 4 [4] => 5 ) // 观察:数字键依然重新索引,字符串键依然是后者覆盖前者。 ?>
我个人在使用
array_merge()
array_merge()
+
这是一个老生常谈的问题,也是很多PHP初学者容易混淆的地方。
array_merge()
+
立即学习“PHP免费学习笔记(深入)”;
+
+
+
何时选用+
+
何时选用array_merge()
array_merge()
说实话,
+
array_merge()
<?php // 示例: `+`运算符的行为 $arrA = ['a' => 1, 'b' => 2]; $arrB = ['b' => 3, 'c' => 4]; $mergedPlus = $arrA + $arrB; print_r($mergedPlus); // 输出: Array ( [a] => 1 [b] => 2 [c] => 4 ) // 观察:键'b'的值保留了$arrA的2,而不是$arrB的3。 echo "\n"; $numArrA = [10, 20]; // 键为0, 1 $numArrB = [30, 40]; // 键为0, 1 $mergedNumPlus = $numArrA + $numArrB; print_r($mergedNumPlus); // 输出: Array ( [0] => 10 [1] => 20 ) // 观察:$numArrB的元素完全被忽略了,因为$numArrA中已经存在键0和1。 // 这在处理数字索引数组时是一个常见的陷阱! ?>
array_merge_recursive()
当你的数组结构变得复杂,比如嵌套了多层数组,并且你希望进行深度合并时,
array_merge_recursive()
array_merge_recursive()
array_merge()
“妙用”: 我个人对
array_merge_recursive()
<?php
// 示例: `array_merge_recursive()`的妙用
$configDefault = [
'database' => [
'host' => 'localhost',
'user' => 'root',
'port' => 3306
],
'settings' => [
'debug' => false,
'logging' => ['level' => 'info']
]
];
$configUser = [
'database' => [
'user' => 'admin', // 覆盖默认user
'password' => '123' // 新增password
],
'settings' => [
'debug' => true, // 覆盖默认debug
'logging' => ['path' => '/var/log'] // 合并logging子数组
],
'cache' => [ // 新增cache配置
'enabled' => true
]
];
$mergedConfig = array_merge_recursive($configDefault, $configUser);
print_r($mergedConfig);
/* 输出:
Array
(
[database] => Array
(
[host] => localhost
[user] => Array // 陷阱:'user'变成了数组!
(
[0] => root
[1] => admin
)
[port] => 3306
[password] => 123
)
[settings] => Array
(
[debug] => Array // 陷阱:'debug'也变成了数组!
(
[0] =>
[1] => 1
)
[logging] => Array
(
[level] => info
[path] => /var/log
)
)
[cache] => Array
(
[enabled] => true
)
)
*/
?>“陷阱”: 从上面的例子可以看到,
array_merge_recursive()
database.user
settings.debug
array_replace_recursive()
合并数组看起来是个小操作,但在处理大量数据或在性能敏感的场景下,选择合适的合并方式就显得尤为重要。
性能考量:
array_merge()
+
array_merge()
array_merge_recursive()
最佳实践: 说到底,合并数组这事儿,最核心的还是“合适”二字。我遇到过不少性能瓶颈,最后发现都是因为在不恰当的场景用了不恰当的合并方式。
知晓你的数据: 首先,搞清楚你想要的结果是什么,是完全追加?是覆盖?是深度合并?你的数组键是数字还是字符串?是否存在重复键?这些都决定了你应该选择哪个函数。
清晰胜于取巧: 不要为了节省一两行代码而使用一个不那么直观或容易理解的合并方法。代码的可读性和可维护性永远是第一位的。
考虑array_replace()
array_replace_recursive()
array_replace()
array_merge_recursive()
<?php
// 示例: `array_replace()`在配置合并中的应用
$defaultSettings = [
'theme' => 'dark',
'language' => 'en',
'notifications' => true
];
$userSettings = [
'language' => 'zh',
'notifications' => false,
'timezone' => 'Asia/Shanghai' // 用户新增的设置
];
// array_replace()会用$userSettings的值替换$defaultSettings中相同的键,并添加新键
$finalSettings = array_replace($defaultSettings, $userSettings);
print_r($finalSettings);
/* 输出:
Array
(
[theme] => dark以上就是如何在PHP中合并两个数组?通过array_merge()实现数组合并的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号