
本文介绍如何在 PHP 中对二维关联数组按指定键(如 x_axis)分组,并将对应另一键(如 y_axis)的值累加,最终生成去重且聚合后的数组。方法简洁高效,适用于数据统计、图表预处理等场景。
本文介绍如何在 php 中对二维关联数组按指定键(如 `x_axis`)分组,并将对应另一键(如 `y_axis`)的值累加,最终生成去重且聚合后的数组。方法简洁高效,适用于数据统计、图表预处理等场景。
在实际开发中,我们常需对原始数据进行聚合处理——例如将多个坐标点按横坐标(x_axis)归类,并将其纵坐标(y_axis)值相加,以生成汇总后的折线图或柱状图数据源。核心需求是:以 x_axis 为分组依据,对同组所有 y_axis 值求和,保留唯一 x_axis 条目。
实现该逻辑最清晰的方式是使用「临时键映射 + 二次重组」策略:
- 遍历原数组,以 x_axis 值作为临时数组的键,累加对应的 y_axis;
- 再次遍历临时数组,将键值对还原为标准的关联子数组格式。
以下是完整可运行的示例代码:
<?php $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],
];
function mergeByXAxis(array $data): array
{
$temp = [];
foreach ($data as $item) {
$x = $item['x_axis'] ?? null;
$y = $item['y_axis'] ?? 0;
if ($x !== null) {
$temp[$x] = ($temp[$x] ?? 0) + $y;
}
}
$result = [];
foreach ($temp as $x => $y) {
$result[] = ['x_axis' => $x, 'y_axis' => $y];
}
return $result;
}
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
)
)
⚠️ 注意事项:
- 确保输入数组每个子项都包含 x_axis 和 y_axis 键,否则建议添加 isset() 或空值校验(如示例中所做);
- 若需保持原始 x_axis 的出现顺序(而非 PHP 数组键自然排序),可在第二步使用 array_keys($temp) 配合 ksort() 或预先记录顺序;
- 对于超大数据集(如万级元素),此 O(n) 双循环方案依然高效,无需引入额外扩展。
该方法语义明确、无依赖、易维护,是 PHP 数组聚合操作的经典实践模式。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











