
本文介绍如何在 php 中对包含日期和计数的二维数组进行去重合并:将相同日期的 viewscount 值累加,保留唯一日期项,并输出标准索引数组。
本文介绍如何在 php 中对包含日期和计数的二维数组进行去重合并:将相同日期的 viewscount 值累加,保留唯一日期项,并输出标准索引数组。
在数据统计类开发场景中(如日志分析、访问量聚合),常需将多条同日期记录合并为单条,并对数值字段(如 viewscount)求和。核心思路是:以日期为键构建关联数组,逐条遍历原始数据,遇重复日期则累加计数,首次出现则直接存入。
以下为完整、健壮的实现方案:
<?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'],
];
// 初始化结果容器(以 date 为键的关联数组)
$indexed = [];
foreach ($data as $record) {
// 确保关键字段存在,避免 Notice 错误
if (!isset($record['date']) || !isset($record['viewscount'])) {
continue; // 或抛出异常:throw new InvalidArgumentException('Missing required keys');
}
$date = $record['date'];
if (isset($indexed[$date])) {
// 同日期:累加 viewscount
$indexed[$date]['viewscount'] += (int)$record['viewscount'];
} else {
// 首次出现:深拷贝原始记录(避免引用干扰)
$indexed[$date] = [
'viewscount' => (int)$record['viewscount'],
'date' => $date
];
}
}
// 转换为纯数字索引数组,符合预期输出格式
$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()替代array_key_exists()更高效,且能同时规避未定义索引警告; - 强制类型转换
(int)可防止字符串拼接(如'1' + '1'→2,而非'11'); - 若原始数据中
date字段含时分秒或格式不统一,建议先标准化(如date('Y-m-d', strtotime($date))); - 如需保持原始顺序(非按日期字典序),此方法天然支持——因遍历顺序即插入顺序,
array_values()不影响逻辑顺序; - 对于超大数据集(>10万条),可考虑使用
SplFixedArray或数据库GROUP BY date SUM(viewscount)提升性能。
该方案简洁、可读性强,适用于绝大多数 PHP 版本(5.4+),是处理时间维度聚合任务的标准实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











