PHP中按日期分组计算数组元素平均值的实现方法
PHP按日期分组计算平均值的实现方法
首先修正你原代码里的一个小错误:你定义了$date = $values[0];,但后续使用了未定义的$d,应该改成$output[$date][1]才能正确分组。
要实现按日期计算平均值,我们需要在遍历过程中同时维护每个日期的数值总和和元素个数,最后用总和除以个数得到平均值。具体实现如下:
实现代码
$output = array(); // 第一步:遍历原数组,统计每个日期的总和与元素个数 foreach ($array as $values) { $date = $values[0]; $num = $values[1]; if (!isset($output[$date])) { // 首次遇到该日期,初始化总和和计数 $output[$date]['sum'] = $num; $output[$date]['count'] = 1; } else { // 已存在该日期,累加总和,计数加1 $output[$date]['sum'] += $num; $output[$date]['count'] += 1; } } // 第二步:计算平均值,整理成目标格式 $result = array(); foreach ($output as $date => $data) { // 平均值 = 总和 / 个数,需要保留小数可使用round() $average = $data['sum'] / $data['count']; $result[] = array($date, $average); } // 查看结果 print_r($result);
代码说明
- 第一遍遍历:用
$output数组的键存储日期,每个键对应的值保存sum(当日数值总和)和count(当日元素个数)。首次遇到某日期时初始化数据,后续遇到则累加更新。 - 第二遍遍历:基于统计好的总和与个数计算平均值,整理成和原数组结构一致的二维数组。
最终结果示例
运行后会得到如下格式的结果:
Array ( [0] => Array ( [0] => 2023-06-28 [1] => 1995.6666666667 ) [1] => Array ( [0] => 2023-06-29 [1] => 2.5 ) [2] => Array ( [0] => 2023-06-30 [1] => 3527 ) )
如果需要固定小数位数,可使用round($average, 2)这类函数处理。
内容的提问来源于stack exchange,提问作者user994461
相关产品推荐
相关产品推荐

