php - PHP - 基于日期时间间隔的数组值的平均值
问题描述
我有以下内容:
[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
推荐阅读
- templates - Azure DevOps Pipeline:一个阶段两次使用相同的模板
- testng - 如何将 TestNG @DataProvider 迁移到 JUnit Jupiter @ParameterizedTest
- html - 检查输入时如何使列表项可见
- java - 在 spring 控制器中获取请求路径
- python - 在 Python 中使用 __str__ 打印对象时遇到问题
- javascript - Babel 不处理 node_modules - 没有排除,没有 .babelrc
- vb.net - 用三个列表框的值编写一个 .txt
- azure-functions - 无法加载文件或程序集“Microsoft.Extensions.Logging.Abstractions
- html - COREUI 侧边栏最小化器和下拉菜单不起作用
- python-3.x - 尝试将 tf-nightly-gpu 与 RTX 30 卡一起使用