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查询中输出的,在这种情况下,您可以在数据库级别进行计算。实际上,我正在考虑先插入数据库,而不是使用数组。这会更有意义吗?我不知道完整的使用情况,但它只是一个检索每月平均值的查询。