根据日期值计算平均值

时间:2018-10-04 22:57:53

标签: php arrays

我有一个带有日期和评分的数组。摘录如下:

array(111) {
 [0]=>
  array(2) {
    ["date"]=>
    string(19) "2018-03-03 17:15:42"
    ["rating"]=>
    int(3)
  }
  [1]=>
  array(2) {
    ["date"]=>
    string(19) "2018-02-24 09:56:03"
    ["rating"]=>
    int(1)
  }
  [2]=>
  array(2) {
    ["date"]=>
    string(19) "2018-02-22 12:46:44"
    ["rating"]=>
    int(5)
  }
}

我想做的是计算每个月的平均评分。此刻,我正在尝试这样

foreach($row as $val){
    $result[substr($val['date'],0,7)] += $val['rating'];
}

很明显,目前这只是将每个月的值相加,然后我需要除以每个月的行数。我不太确定该怎么做。我也不确定我在上面所做的事情是否是实现我所追求的最好方法。

此外,有了上述内容,我似乎每个月都会收到很多通知

  

通知:未定义索引:2012-05

但是在所有这些通知之后,它确实输出了每个月的计数。为什么我会收到这些通知?

谢谢

2 个答案:

答案 0 :(得分:2)

user3720435所述,在添加任何内容之前,您需要将总和初始化为零。然后,您仍然需要除以每月的收视次数才能获得平均值。这可以通过添加另一个跟踪这些计数的地图来实现。

foreach ($row as $val) {
  $key = substr($val['date'], 0, 7);
  if (!array_key_exists($key, $result)) {
    $result[$key] = 0;
    $count[$key] = 0;
  }
  $result[$key] += $val['rating'];
  $count[$key]++;
}

foreach ($row as $val) {
  $key = substr($val['date'], 0, 7);
  $result[$key] /= $count[$key];
}

答案 1 :(得分:1)

您的=split(arrayformula(query(Sheet1!A1:A,"where A is not null")&"#Const string"),"#") 索引在尝试添加之前不存在。您需要先添加数组。

$result
相关问题