0

0

PHP 数组合并:深入理解 + 运算符的行为与应用

DDD

DDD

发布时间:2025-09-30 17:05:17

|

533人浏览过

|

来源于php中文网

原创

PHP 数组合并:深入理解 + 运算符的行为与应用

PHP 中的 + 运算符用于合并数组,但其行为与 array_merge 函数存在显著差异。它遵循左侧数组键的优先原则,即当两个数组存在相同键时,左侧数组的值会被保留,而右侧数组中对应键的值将被忽略。这一特性在处理索引数组合并时尤为关键,理解其工作机制对于避免意外结果至关重要。

+ 运算符基础与规则

php 提供多种方式来合并数组,其中 + 运算符(数组联合运算符)是一种常见但常被误解的方法。与字符串连接或数值加法不同,当应用于数组时,+ 运算符的主要作用是将右侧数组的元素“追加”到左侧数组,但有一个核心规则:对于在两个数组中都存在的键,左侧数组的元素将被保留,而右侧数组中具有相同键的元素将被忽略。 换句话说,左侧数组的键拥有更高的优先级。

根据 PHP 官方文档的描述:

数组联合运算符 + 返回右侧数组附加到左侧数组的结果;对于在两个数组中都存在的键,将使用左侧数组的元素,并忽略右侧数组中匹配的元素。

这意味着 + 运算符不会覆盖现有键的值,而是填充左侧数组中缺失的键。

不同数组类型的合并示例

为了更好地理解 + 运算符的工作原理,我们将通过不同类型的数组组合来演示其行为。

关联数组与关联数组合并

当两个关联数组使用 + 运算符合并时,如果右侧数组包含左侧数组中不存在的键,这些键及其对应的值将被添加到结果数组中。如果键已存在于左侧数组,则左侧数组的值保持不变。

立即学习PHP免费学习笔记(深入)”;

$array1 = ["The" => "quick", "brown" => "fox"];
$array2 = ["jumps" => "over", "the" => "lazy dog"];

$combinedArray = $array1 + $array2;

print_r($combinedArray);
/* 输出:
Array
(
    [The] => quick
    [brown] => fox
    [jumps] => over
    [the] => lazy dog
)
*/

在此示例中,$array2 中的所有键("jumps", "the")在 $array1 中均不存在,因此它们被成功添加到 $combinedArray 中。

索引数组与关联数组合并

当一个索引数组与一个关联数组合并时,索引数组的数值键保持不变。关联数组的键(无论是字符串还是数值)如果与索引数组的现有键不冲突,则会被添加。

$array1 = ["The", "quick", "brown", "fox"]; // 键为 0, 1, 2, 3
$array2 = ["jumps" => "over", "the" => "lazy dog"];

$combinedArray = $array1 + $array2;

print_r($combinedArray);
/* 输出:
Array
(
    [0] => The
    [1] => quick
    [2] => brown
    [3] => fox
    [jumps] => over
    [the] => lazy dog
)
*/

$array1 的数值键 0、1、2、3 与 $array2 的字符串键 "jumps"、"the" 不冲突,因此 $array2 的元素被成功添加。

关联数组与索引数组合并

与上一个示例类似,关联数组的字符串键会优先保留。索引数组的元素会以其数值键的形式被添加,前提是这些数值键不与关联数组中已有的(无论是字符串还是数值)键冲突。

$array1 = ["The" => "quick", "brown" => "fox"];
$array2 = ["jumps", "over", "the", "lazy dog"]; // 键为 0, 1, 2, 3

$combinedArray = $array1 + $array2;

print_r($combinedArray);
/* 输出:
Array
(
    [The] => quick
    [brown] => fox
    [0] => jumps
    [1] => over
    [2] => the
    [3] => lazy dog
)
*/

$array1 的字符串键 "The"、"brown" 与 $array2 的数值键 0、1、2、3 不冲突,因此 $array2 的元素被成功添加。

PHP 网络编程技术与实例(曹衍龙)
PHP 网络编程技术与实例(曹衍龙)

PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍

下载

索引数组与索引数组合并的特殊性

这是最容易引起混淆的场景。当两个索引数组使用 + 运算符合并时,由于 PHP 默认会为索引数组分配从 0 开始的数值键,因此两个数组很可能会拥有相同的键(0, 1, 2, ...)。根据 + 运算符的规则,左侧数组的键拥有优先级,这意味着右侧数组中所有与左侧数组键冲突的元素都将被忽略。

$array1 = ["The", "quick", "brown", "fox"]; // 键为 0, 1, 2, 3
$array2 = ["jumps", "over", "the", "lazy dog"]; // 键为 0, 1, 2, 3

$combinedArray = $array1 + $array2;

print_r($combinedArray);
/* 输出:
Array
(
    [0] => The
    [1] => quick
    [2] => brown
    [3] => fox
)
*/

在这个例子中,$array1 和 $array2 都拥有键 0、1、2、3。由于 $array1 在左侧,它的所有元素都被保留。而 $array2 中的所有元素("jumps", "over", "the", "lazy dog")因为它们的键(0, 1, 2, 3)已存在于 $array1 中,所以被完全忽略。结果数组与 $array1 完全相同。

注意事项与最佳实践

理解 + 运算符与 array_merge() 等其他数组合并函数的区别至关重要。

  • + 运算符 (Array Union):

    • 键优先级: 左侧数组的键优先。
    • 数值键处理: 不会重新索引数值键。如果数值键冲突,右侧元素被忽略。
    • 用途: 适用于希望在不覆盖现有值的情况下,为数组添加新元素或默认值。例如,合并配置数组,确保用户自定义设置不会被默认设置覆盖。
  • array_merge() 函数:

    • 键优先级: 对于字符串键,右侧数组的值会覆盖左侧数组中相同键的值。
    • 数值键处理: 会重新索引数值键,将所有数值键视为新的元素并从 0 开始重新分配键。
    • 用途: 适用于希望将多个数组的所有元素合并在一起,并且希望右侧数组的值覆盖左侧数组的相同字符串键值,或需要重新索引数值键的场景。
  • array_replace() 函数:

    • 键优先级: 右侧数组的值会覆盖左侧数组中相同键的值(无论键是字符串还是数值)。
    • 数值键处理: 不会重新索引数值键。
    • 用途: 当你需要用一个数组的元素替换另一个数组的相应元素,并且希望保留原始键(包括数值键)时使用。

示例对比:

$arrA = [0 => 'a', 1 => 'b'];
$arrB = [0 => 'x', 2 => 'y'];

// 使用 + 运算符
$resultPlus = $arrA + $arrB;
// print_r($resultPlus);
/* 输出:
Array
(
    [0] => a
    [1] => b
    [2] => y
)
*/
// 0 键冲突,arrA 的 'a' 保留;1 键 arrB 没有;2 键 arrA 没有,arrB 的 'y' 添加。

// 使用 array_merge()
$resultMerge = array_merge($arrA, $arrB);
// print_r($resultMerge);
/* 输出:
Array
(
    [0] => a
    [1] => b
    [2] => x
    [3] => y
)
*/
// 所有元素都被追加,数值键重新索引。

总结

PHP 的 + 运算符是一个强大的数组合并工具,但其行为模式(特别是左侧键优先和不重新索引数值键的特性)与 array_merge() 等函数截然不同。理解这些差异,尤其是在处理索引数组时,是编写健壮 PHP 代码的关键。在选择数组合并方法时,应根据具体需求仔细权衡,是需要保留现有键的值,还是需要覆盖或重新索引所有键。正确运用 + 运算符,可以在特定场景下提供简洁高效的解决方案。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1669

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1104

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1009

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1396

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1227

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1438

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1302

2023.11.13

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号