0

0

PHP高效合并数组:实现基于键的数值累加与新键添加

聖光之護

聖光之護

发布时间:2025-12-02 13:18:08

|

228人浏览过

|

来源于php中文网

原创

PHP高效合并数组:实现基于键的数值累加与新键添加

本文旨在提供一个在php中高效合并多个关联数组的教程。当数组间存在相同键时,其对应值将被累加;而对于仅存在于某个数组中的独有键,则将其作为新元素添加到结果集中。通过详细的步骤解析和实际代码示例,本教程将帮助开发者掌握处理此类复杂数组整合任务的实用技巧,确保数据合并的逻辑准确无误。

在PHP开发中,我们经常需要处理数据的合并与整合。一个常见的场景是,我们需要合并两个或多个关联数组,其中一些键可能在多个数组中都存在,此时我们需要将这些相同键对应的值进行累加;而对于那些只存在于某个数组中的键,则需要将其及其对应的值一并添加到最终的结果数组中。直接使用array_merge()函数或+运算符通常无法满足这种“按键累加”的需求,因为它们要么覆盖相同键的值,要么只保留第一个数组的值。

问题场景与数据结构

假设我们有以下两个关联数组,它们代表了某种资源或商品的数量统计:

$array1 = [2 => 90, 12 => 400, 25 => 750, 0 => 50];
$array2 = [1 => 100, 23 => 200, 12 => 1000, 0 => 5];

我们的目标是生成一个合并后的数组,其预期结果如下:

// 键0的值 (50 + 5 = 55)
// 键2的值 (90)
// 键12的值 (400 + 1000 = 1400)
// 键25的值 (750)
// 键1的值 (100)
// 键23的值 (200)
// 最终结果类似:[0 => 55, 2 => 90, 12 => 1400, 25 => 750, 1 => 100, 23 => 200]

核心思路

为了实现上述目标,我们可以采用以下分步策略:

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

  1. 识别共有键: 找出在所有待合并数组中都存在的键。
  2. 累加共有键的值: 对于识别出的共有键,将其在各个数组中的值进行累加,并存入结果数组。
  3. 添加独有键的值: 将那些不属于共有键的、只存在于某个数组中的键及其对应的值,也添加到结果数组中。

PHP实现步骤

我们将通过一个具体的PHP代码示例来演示如何实现这一过程。

1. 获取所有键并找出共有键

首先,我们需要获取两个数组的所有键,并找出它们之间的交集,即共有键。

PhotoG
PhotoG

PhotoG是全球首个内容营销端对端智能体

下载
$ak = array_keys($array1); // 获取 $array1 的所有键
$bk = array_keys($array2); // 获取 $array2 的所有键
$ck = array_intersect($ak, $bk); // 找出 $ak 和 $bk 的交集,即共有键

2. 累加共有键的值

遍历$ck(共有键),将每个共有键在$array1和$array2中的值相加,并将结果存入最终的$out数组。同时,为了避免重复处理,我们将这些已处理的共有键从原始数组中移除。

$out = []; // 初始化结果数组

foreach ($ck as $commonKey) {
    $out[$commonKey] = $array1[$commonKey] + $array2[$commonKey];
    unset($array1[$commonKey]); // 从 $array1 中移除已处理的共有键
    unset($array2[$commonKey]); // 从 $array2 中移除已处理的共有键
}

3. 添加剩余的独有键值

经过上一步操作后,$array1和$array2中只剩下它们各自独有的键及其对应的值。现在,我们将这些剩余的元素逐一添加到$out数组中。

foreach ($array1 as $key => $value) {
    $out[$key] = $value;
}

foreach ($array2 as $key => $value) {
    $out[$key] = $value;
}

完整示例代码

将上述步骤整合到一起,形成完整的PHP代码如下:

 90, 12 => 400, 25 => 750, 0 => 50];
$array2 = [1 => 100, 23 => 200, 12 => 1000, 0 => 5];

// 1. 获取所有键并找出共有键
$ak = array_keys($array1);
$bk = array_keys($array2);
$ck = array_intersect($ak, $bk); // 找出 $array1 和 $array2 的共有键

$out = []; // 初始化结果数组

// 2. 累加共有键的值
foreach ($ck as $commonKey) {
    // 确保值是数值类型,避免字符串拼接
    $out[$commonKey] = (int)$array1[$commonKey] + (int)$array2[$commonKey];

    // 从原始数组中移除已处理的共有键,以便后续添加独有键
    unset($array1[$commonKey]);
    unset($array2[$commonKey]);
}

// 3. 添加剩余的独有键值
// 将 $array1 中剩余的独有键值添加到结果数组
foreach ($array1 as $key => $value) {
    $out[$key] = $value;
}

// 将 $array2 中剩余的独有键值添加到结果数组
foreach ($array2 as $key => $value) {
    $out[$key] = $value;
}

// 输出最终结果
var_dump($out);

?>

输出结果与解释

运行上述代码,您将得到以下输出:

array(6) {
  [0]=> int(55)
  [2]=> int(90)
  [12]=> int(1400)
  [25]=> int(750)
  [1]=> int(100)
  [23]=> int(200)
}

这个结果与我们预期的完全一致:

  • 键 0 的值是 50 + 5 = 55。
  • 键 2 的值是 90(仅存在于 $array1)。
  • 键 12 的值是 400 + 1000 = 1400。
  • 键 25 的值是 750(仅存在于 $array1)。
  • 键 1 的值是 100(仅存在于 $array2)。
  • 键 23 的值是 200(仅存在于 $array2)。

注意事项

  1. 数据类型: 在累加值时,如果原始数组中的值可能是字符串形式的数字,最好进行类型转换(例如 (int)$value 或 (float)$value),以确保进行数值相加而非字符串拼接。本示例中已使用 (int) 进行了转换。
  2. 多数组合并: 如果需要合并三个或更多数组,此方法可以进行扩展。一种方式是迭代地合并:先合并$array1和$array2得到$out1,然后合并$out1和$array3,以此类推。更优雅的方案可能涉及array_reduce或其他自定义循环逻辑。
  3. 性能考虑: 对于非常庞大的数组,array_keys()和array_intersect()可能会消耗一定的内存和时间。但在大多数常见场景下,这种方法的性能是完全可以接受的。
  4. 键的类型: PHP关联数组的键可以是整数或字符串。本示例中,键是整数,但对于字符串键同样适用。

总结

本教程详细介绍了如何在PHP中实现基于键的数组合并与数值累加。通过识别共有键、累加其值,并随后添加独有键的策略,我们能够灵活地处理复杂的数组整合需求。所提供的代码示例清晰地展示了这一过程,并强调了在实际应用中需要注意的关键点,如数据类型转换。掌握这种方法将有助于开发者更高效、准确地处理PHP中的数据聚合任务。

相关专题

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

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

2636

2023.09.01

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

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

1632

2023.10.11

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

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

1513

2023.10.11

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

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

952

2023.10.23

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

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

1418

2023.10.23

html怎么上传
html怎么上传

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

1234

2023.11.03

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

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

1447

2023.11.09

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

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

1306

2023.11.13

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

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

精品课程

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

共137课时 | 8.8万人学习

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

共6课时 | 7.8万人学习

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

共13课时 | 0.9万人学习

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

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