在PHP中每月组合日期和总和值数组

时间:2015-09-09 13:13:37

标签: php arrays date

我有一个日期数组作为键和值(整数)的形式:

[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

我试图解决的方法是使用爆炸函数,然后尝试重新组合这些,但这似乎比我需要的更复杂。

2 个答案:

答案 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

可能有更多的方法,这些只是我的头脑