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怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

232

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

87

2025.10.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

624

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

633

2024.03.22

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

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

精品课程

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

共137课时 | 10.1万人学习

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

共6课时 | 11.2万人学习

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

共13课时 | 0.9万人学习

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

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