我有一个带有日期和评分的数组。摘录如下:
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
但是在所有这些通知之后,它确实输出了每个月的计数。为什么我会收到这些通知?
谢谢
答案 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