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

DDD
发布: 2025-09-30 17:05:17
原创
521人浏览过

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 网络编程技术与实例(曹衍龙) 386
查看详情 PHP 网络编程技术与实例(曹衍龙)

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

这是最容易引起混淆的场景。当两个索引数组使用 + 运算符合并时,由于 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在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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