php - 我如何遍历每日日期的多维数组并按月分组
问题描述
我有一个包含每日日期和值的多维数组,例如:
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)
由于某些地区的日期重复,我不确定如何实现这一结果
解决方案
我将简单地遍历总体数组,然后是第二级数组中的 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;
}
}
}
如有必要,您可以在需要时重新格式化键以获得文本表示。
推荐阅读
- vba - Outlook DASL - 当发送者和接收者相同时跳过
- angular - 角6哈希网址的结尾
- sql - 查询 Hive 中左外连接的非 Equi 连接
- azure-powershell - 执行 azcopy 时出现 Oauth 令牌错误
- javascript - 在 JSFiddle 上找到了这个 JavaScript,但似乎无法让它工作
- c++ - a到b范围内斐波那契数之和的最后一位
- r - group_modify() 下的 case_when() 中的 %within% 不起作用
- sql - 选择当前地址
- android - 即使在 Android 上提供了必要的权限后,带有 _blank 选项的 Cordova InAppBrowser 也会阻止我使用麦克风
- graphql - 序列化和反序列化 GraphQLSchema 到/从数据库