
本文介绍如何在 php 中对包含日期和计数值的二维数组进行去重与聚合,将相同日期的 viewscount 相加,最终输出结构清晰、日期唯一的结果数组。
本文介绍如何在 php 中对包含日期和计数值的二维数组进行去重与聚合,将相同日期的 viewscount 相加,最终输出结构清晰、日期唯一的结果数组。
在数据报表、访问统计或日志分析等场景中,常需将多条同日期的记录合并为单条,并累加其数值字段(如 viewscount)。PHP 提供了灵活的数组操作能力,无需依赖数据库即可高效完成此类聚合任务。
核心思路是:以日期为键构建临时关联数组,遍历原始数据,若日期已存在则累加 viewscount,否则直接存入。最后用 array_values() 重置索引,恢复为纯数字索引数组。
以下是完整可运行示例代码:
<?php $data = [
['viewscount' => 18, 'date' => '2022-07-14'],
['viewscount' => 19, 'date' => '2022-07-18'],
['viewscount' => 1, 'date' => '2022-07-19'],
['viewscount' => 1, 'date' => '2022-08-03'],
['viewscount' => 1, 'date' => '2022-08-03'],
];
$indexed = [];
foreach ($data as $record) {
$date = $record['date'];
if (isset($indexed[$date])) {
$indexed[$date]['viewscount'] += $record['viewscount'];
} else {
$indexed[$date] = $record;
}
}
$result = array_values($indexed);
print_r($result);
?>
✅ 输出结果:
Array
(
[0] => Array
(
[viewscount] => 18
[date] => 2022-07-14
)
[1] => Array
(
[viewscount] => 19
[date] => 2022-07-18
)
[2] => Array
(
[viewscount] => 1
[date] => 2022-07-19
)
[3] => Array
(
[viewscount] => 2
[date] => 2022-08-03
)
)
? 注意事项:
- 使用
isset($indexed[$date])比array_key_exists()更高效且语义更清晰(因$indexed[$date]不会为null以外的“空值”); - 若原始数据中
viewscount可能为非数字(如字符串'5'),建议提前(int)$record['viewscount']强制转换,避免隐式类型拼接; - 此方法时间复杂度为 O(n),空间复杂度为 O(k)(k 为唯一日期数),性能优异,适用于数千条以内数据;
- 如需按日期升序/降序输出,可在
array_values()后调用usort($result, fn($a, $b) => strcmp($a['date'], $b['date']));。
该方案简洁、健壮、易于扩展——例如后续增加 clicks、users 等字段时,只需在累加逻辑中同步处理即可。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











