Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Datetime_Average_Intervals - Fatal编程技术网

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 

您需要在数据上循环,转换日期并求和值。做一个开始,我相信其他人会帮助解决任何大问题。谢谢!这管用!