合并关联数组中相同键的值并统计总和(按 x_axis 分组累加 y_axis)
PHP 数组分组聚合:按 x_axis 合并并累加 y_axis 值的完整指南

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
本文详细讲解在 PHP 中如何对二维关联数组进行高效分组与聚合运算,通过指定分组键(如 x_axis)对数值键(如 y_axis)进行累加合并,生成去重且结构清晰的汇总数组,适用于数据统计、报表生成及图表数据预处理等多种场景。
在 PHP 数据处理与统计分析过程中,开发者经常需要处理包含重复维度的二维数据集。例如,从数据库查询或 API 接口获取的原始数据中,可能存在多条记录共享相同的分类标识(如日期、用户ID、产品编号或坐标标签 x_axis),而我们需要将这些重复项合并,并对其对应的数值指标(如 y_axis)进行求和计算。具体而言,我们面对的是一个由关联数组构成的二维数组,每个子数组结构为 ['x_axis' => $x, 'y_axis' => $y]。目标是将所有 x_axis 值相同的记录聚合为一条,并将其对应的 y_axis 值累加,最终输出一个无重复键且包含总和的新数组。
实现这一需求的核心算法非常明确:首先,以 x_axis 的值作为唯一键,创建一个临时哈希映射(关联数组)用于累积求和;接着,遍历原始数据,将每条记录的 y_axis 值累加到映射中对应的键上;最后,将聚合后的映射转换回标准的索引数组格式。 以下是一种经过优化的 PHP 实现方案,兼具高性能、强健壮性与良好的代码可读性:
$y) {
$result[] = ['x_axis' => $x, 'y_axis' => $y];
}
return $result;
}
// 示例数据
$data = [
['x_axis' => 8, 'y_axis' => 1],
['x_axis' => 9, 'y_axis' => 1],
['x_axis' => 11, 'y_axis' => 2],
['x_axis' => 11, 'y_axis' => 3],
];
print_r(mergeByXAxis($data));
✅ 执行上述代码,输出结果如下:
Array
(
[0] => Array
(
[x_axis] => 8
[y_axis] => 1
)
[1] => Array
(
[x_axis] => 9
[y_axis] => 1
)
[2] => Array
(
[x_axis] => 11
[y_axis] => 5
)
)
? 关键要点与优化建议:
- 本方法采用单层循环,时间复杂度为 O(n),相比传统的嵌套循环或多次
array_filter方案,性能显著提升,尤其适合处理大规模数据集; - 代码中使用了空合并运算符
??提供默认值,能优雅处理数组键缺失的情况,避免产生未定义索引警告,提升代码健壮性; - 若需保持输出结果中
x_axis的顺序与原始数据首次出现顺序一致,可在第二步重构前,通过记录首次出现的键序或结合array_keys与自定义排序来实现; - 该模式具备高度可扩展性。例如,除了求和,你可能还需要计算平均值、最大值、最小值或统计记录条数。只需将聚合映射中的值从标量改为数组或对象,存储多个统计指标即可轻松实现。
总而言之,这种基于键值对数组进行分组聚合的操作,是 PHP 开发中一项极为常见且重要的数据处理技能。无论是为前端 ECharts、Highcharts 等图表库准备聚合数据、生成业务统计报表,还是整合多个数据源的返回结果,掌握高效、清晰的数组分组求和技巧都能让你的代码更加专业和高效。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
C++ std::ranges::any_of用法 _ 快速检查容器元素满足条件【干货】
C++ std::ranges::any_of用法详解 | 高效检查容器元素是否满足条件【实战指南】 概括而言,std::ranges::any_of 是C++20引入的用于快速检测容器或范围中是否存在至少一个满足指定条件的元素的算法。其核心优势在于语义直观、支持现代C++范围概念、具备短路求值特性
C++ set容器去重与排序 _ insert函数与自定义比较器【实战】
C++ set容器去重与排序:insert函数与自定义比较器实战解析 set插入重复元素时,如何准确判断insert是否成功? 判断C++ set插入操作是否成功,关键在于正确解读其返回值。标准库中的set::insert函数会返回一个std::pair类型的结果。其中,second成员是一个布尔标
php怎么用各类ai做播客脚本撰写_音频内容【操作】
PHP调用OpenAI API生成播客脚本需用openai-php SDK,指定gpt-4-turbo等支持对话的模型,system提示词明确输出Markdown及结构化字段;解析时用preg_split配合PREG_SPLIT_DELIM_CAPTURE提取[HOST][GUEST]等标记段落;T
PHP怎么实现Eloquent Has Many Through远层一对多_Laravel间接关联查询【指南】
PHP怎么实现Eloquent Has Many Through远层一对多_Lara vel间接关联查询【指南】 hasManyThrough 返回空数组的最常见原因是字段名未对齐:需严格匹配中间表外键(如 author_id)、远端表外键(如 article_id)及本地主键(如 uuid),否则
c++如何获取Windows下任意文件的唯一文件标识符【技巧】
C++如何获取Windows下任意文件的唯一文件标识符【技巧】 在Windows系统中,稳定且持久地标识一个文件,推荐使用内核级的FILE_ID,它由VolumeSerialNumber(卷序列号)与FileId(文件ID)共同构成。获取它的标准方法是调用GetFileInformationByHa
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

