PHP-基于日期时间间隔的数组值的平均值
我有以下资料:PHP-基于日期时间间隔的数组值的平均值,php,arrays,datetime,average,intervals,Php,Arrays,Datetime,Average,Intervals,我有以下资料: [1]=> array(4) { ["id"]=> int(1) ["sensorId"]=> int(52) ["dateTime"]=> string(20) "2018-03-04T22:40:32Z" ["value"]=> float(50) } [2]=> array(4) { ["id"]=> int(1) ["sensorId"]=
[1]=>
array(4) {
["id"]=>
int(1)
["sensorId"]=>
int(52)
["dateTime"]=>
string(20) "2018-03-04T22:40:32Z"
["value"]=>
float(50)
}
[2]=>
array(4) {
["id"]=>
int(1)
["sensorId"]=>
int(52)
["dateTime"]=>
string(20) "2018-03-04T22:49:32Z"
["value"]=>
float(40)
}
[3]=>
array(4) {
["id"]=>
int(1)
["sensorId"]=>
int(52)
["dateTime"]=>
string(20) "2018-03-04T23:05:32Z"
["value"]=>
float(10)
}
[4]=>
array(4) {
["id"]=>
int(1)
["sensorId"]=>
int(52)
["dateTime"]=>
string(20) "2018-03-04T23:25:32Z"
["value"]=>
float(65)
}
我想得到每个时间间隔(本例中为小时)的平均值,因此:
我找不到解决此问题所需的函数组合。这不是性能方面的最佳解决方案,但您可以从它开始。按日期将值分组,最后计算平均值
$values = [
[
"id" => 1,
"sensorId" => 52,
"dateTime" => "2018-03-04T22:40:32Z",
"value" => 50.0
],
[
"id" => 1,
"sensorId" => 52,
"dateTime" => "2018-03-04T22:49:32Z",
"value" => 40,
],
[
"id" => 1,
"sensorId" => 52,
"dateTime" => "2018-03-04T23:05:32Z",
"value" => 10,
],
[
"id" => 1,
"sensorId" => 52,
"dateTime" => "2018-03-04T23:25:32Z",
"value" => 65,
],
];
$groupedValues = [];
foreach ($values as $value) {
$dateKey = (new DateTime($value['dateTime']))->format('Y-m-d H');
if (empty($groupedValues[$dateKey])) {
$groupedValues[$dateKey] = [
'total' => $value['value'],
'count' => 1
];
} else {
$groupedValues[$dateKey]['total'] += $value['value'];
$groupedValues[$dateKey]['count'] += 1;
}
}
foreach ($groupedValues as $date => $group) {
$average = $group['total'] / $group['count'];
echo "{$date} = {$average} \n";
}
结果:
2018-03-04 22 = 45
2018-03-04 23 = 37.5
您需要在数据上循环,转换日期并求和值。做一个开始,我相信其他人会帮助解决任何大问题。谢谢!这管用!