
本文介绍如何在 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()更高效,且语义更贴合“键是否存在”的判断场景; - 确保输入数组中每项均包含
date和viewscount键,否则需添加isset()或array_key_exists()防御性检查; - 若需按日期升序/降序输出,可在
array_values()后调用usort($result, fn($a, $b) => strcmp($a['date'], $b['date']));; - 此方法时间复杂度为 O(n),空间复杂度为 O(k)(k 为不重复日期数),适用于万级以内数据量。
该方案简洁、健壮、易维护,是 PHP 数组聚合处理的经典实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











