我有一个日期数组作为键和值(整数)的形式:
[2015-07-14] => 40
[2015-07-15] => 5
[2015-07-16] => 8
[2015-07-17] => 0
[2015-07-18] => 0
[2015-07-19] => 0
[2015-07-20] => 0
[2015-07-21] => 0
[2015-07-22] => 0
[2015-07-23] => 0
[2015-07-24] => 0
[2015-07-25] => 0
[2015-07-26] => 0
[2015-07-27] => 0
[2015-07-28] => 0
[2015-07-29] => 0
[2015-07-30] => 0
[2015-07-31] => 0
[2015-08-01] => 0
[2015-08-02] => 1
[2015-08-03] => 1
[2015-08-04] => 2
[2015-08-05] => 1
用户可以选择startdate和enddate。
是否有一种快速简便的方法来组合这些日期并按月汇总值?在我的例子中,结果看起来应该像是:
[2015-07] => 53
[2015-08] => 5
我试图解决的方法是使用爆炸函数,然后尝试重新组合这些,但这似乎比我需要的更复杂。
答案 0 :(得分:2)
类似
foreach($yourarray as $key=>$val){
$result[substr($key,0,7)] += $val;
}
答案 1 :(得分:0)
当然有。
$per_month = array();
foreach ($arr as $key => $val) {
$month = substr($key, 0, 7);
if (!isset($per_month[$month])) {
$per_month[$month] = 0;
}
$per_month[$month] += $val;
}
echo var_dump($per_month["2015-07"]);
编辑:
此外,您可以使用sscanf()
代替substr()foreach...
list($y, $m, $d) = sscanf($key, "%d-%d-%d");
$per_month[$y.'-'.$m] += $val;
endforeach
...或爆炸()
foreach...
$var = explode('-', $key); // $var[0] = year, $var[1] = month ...
...
$per_month[$var[0].'-'.$var[1]] += $val;
endforeach
可能有更多的方法,这些只是我的头脑