首页 > 解决方案 > 我如何遍历每日日期的多维数组并按月分组

问题描述

我有一个包含每日日期和值的多维数组,例如:

Array ( [2020-03-14] => 0 [2020-03-15] => 0 [2020-03-16] => 8 [2020-03-17] => 8 [2020-03-18] => 8 [2020-03-19] => 8 [2020-03-20] => 8 )
Array ( [2020-03-21] => 0 [2020-03-22] => 0 [2020-03-23] => 8 [2020-03-24] => 8 [2020-03-25] => 8 [2020-03-26] => 8 [2020-03-27] => 8 )
Array ( [2020-03-28] => 0 [2020-03-29] => 0 [2020-03-30] => 8 [2020-03-31] => 8 [2020-04-01] => 8 [2020-04-02] => 8 [2020-04-03] => 8 )
Array ( [2020-04-04] => 0 [2020-04-05] => 0 [2020-04-06] => 8 [2020-04-07] => 8 [2020-04-08] => 8 [2020-04-09] => 8 [2020-04-10] => 0 )
Array ( [2020-04-11] => 0 [2020-04-12] => 0 [2020-04-13] => 0 [2020-04-14] => 8 [2020-04-15] => 8 [2020-04-16] => 8 [2020-04-17] => 8 )
Array ( [2020-04-18] => 0 [2020-04-19] => 0 [2020-04-20] => 08 [2020-04-21] => 08 [2020-04-22] => 08 [2020-04-23] => 08 [2020-04-24] => 08 )
Array ( [2020-04-25] => 0 [2020-04-26] => 0 [2020-04-27] => 08 [2020-04-28] => 08 [2020-04-29] => 08 [2020-04-30] => 08 [2020-05-01] => 08 )
Array ( [2020-05-02] => 0 [2020-05-03] => 0 [2020-05-04] => 8 [2020-05-05] => 8 [2020-05-06] => 8 [2020-05-07] => 8 [2020-05-08] => 0 )
Array ( [2020-05-02] => 0 [2020-05-03] => 0 [2020-05-04] => 0 [2020-05-05] => 0 [2020-05-06] => 0 [2020-05-07] => 0 [2020-05-08] => 8 )
Array ( [2020-05-09] => 0 [2020-05-10] => 0 [2020-05-11] => 08 [2020-05-12] => 08 [2020-05-13] => 08 [2020-05-14] => 08 [2020-05-15] => 08 )

我想按月汇总这些值并将它们存储在另一个数组中,例如:

//expected out
Array ([2020-March] => 96 [2020-April] => 160 [2020-May] => 88)

由于某些地区的日期重复,我不确定如何实现这一结果

标签: php

解决方案


我将简单地遍历总体数组,然后是第二级数组中的 foreach。只需检查键的前 7 个字符并将它们添加到各自的括号中。

$aggregation = [];
for ($i = 0, $iMax = count($toAggregate); $i < $iMax; ++$i) {
    foreach ($toAggregate[$i] as $date => $value) {
        $month = substr($date, 0, 7);
        if (isset($aggregation[$month])) {
            $aggregation[$month] += $value;
        } else {
            $aggregation[$month] = $value;
        }
    }
}

如有必要,您可以在需要时重新格式化键以获得文本表示。


推荐阅读