本文介绍如何在 PHP 中对二维关联数组按指定键(如 x_axis)分组,并将对应另一键(如 y_axis)的值累加,最终生成去重且聚合后的数组。方法简洁高效,适用于数据统计、图表预处理等场景。
在实际开发中,我们常需对原始数据进行聚合处理——例如将多个坐标点按横坐标(x_axis)归类,并将其纵坐标(y_axis)值相加,以生成汇总后的折线图或柱状图数据源。核心需求是:以 x_axis 为分组依据,对同组所有 y_axis 值求和,保留唯一 x_axis 条目。
实现该逻辑最清晰的方式是使用「临时键映射 + 二次重组」策略:
- 遍历原数组,以 x_axis 值作为临时数组的键,累加对应的 y_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 数组聚合操作的经典实践模式。