Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据日期值计算平均值_Php_Arrays - Fatal编程技术网

Php 根据日期值计算平均值

Php 根据日期值计算平均值,php,arrays,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"]=>

我有一个带有日期和等级的数组。一个小摘录看起来像这样

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'];
}
我想做的是计算每个月的平均评分。目前,我正在这样努力

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

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


谢谢

在尝试添加之前,您的
$result
索引不存在。您需要先添加数组

foreach($row as $val){
  $key = substr($val['date'],0,7);
  if (!array_key_exists($key, $result)) {
    $result[$key] = 0;
  }
  $result[$key] += $val['rating'];
}
如所述,在添加任何内容之前,需要将总和初始化为零。然后你仍然需要除以每月的收视率来得到平均值。这可以通过添加另一个跟踪这些计数的地图来实现

foreach($val行){
$key=substr($val['date'],0,7);
如果(!array_key_存在($key,$result)){
$result[$key]=0;
$count[$key]=0;
}
$result[$key]+=$val['rating'];
$count[$key]++;
}
foreach(行为$val){
$key=substr($val['date'],0,7);
$result[$key]/=$count[$key];
}

首次使用此运算符设置一个月的值时,您会收到通知:
+=
。它试图添加一些以前未定义的内容。因此,为了消除这些通知,您应该首先检查这个月是否已经存在,然后添加
+=
,否则只需设置
=
,数组过滤器和数组减少的组合也可以完成这项工作。看起来它可能是从db查询中输出的,在这种情况下,您可以在数据库级别进行计算。实际上,我正在考虑先插入数据库,而不是使用数组。这会更有意义吗?我不知道完整的使用情况,但它只是一个检索每月平均值的查询。