我得到过去一小时的温度读数。数据以行的形式出现,每10分钟显示一次数据。
200504, 0530, 0, 262.3, 1.399, 6.097, 2.15,
200504, 0540, 0, 251.2, 1.29, 6.08, 2.09,
200504, 0550, 0, 249.4, 1.685, 5.921, 2.44,
200504, 0600, 0, 249.5, 1.465, 5.904, 2.27,
200504, 0610, 0, 247.7, 1.801, 6.214, 2.61,
200504, 0620, 0, 246.9, 1.908, 6.532, 3.04,
需要计算行中最后一个元素的平均值。
$str = '190227, 2020, 9, 245.8, 2.886, 5.753, 0';
$pattern = '/([\S]*),\s([\S]*),\s([\S]*),\s([\S]*),\s([\S]*),\s([\S]*),\s([\S]*)/m';
preg_match($pattern, $str, $matches);
$result = [
"Date" => intval($matches[1]),
"Time" => intval($matches[2]),
"h" => intval($matches[3]),
"Deg.M" => floatval($matches[4]),
"m/s" => floatval($matches[5]),
"deg.C" => floatval($matches[6]),
"mm/h" => floatval($matches[7])
];
通过这个解决方案,我得到了一个时间间隔的数据,但我如何将所有这些数据写入一个数组并计算平均值?
你可以把它当作一个CSV(逗号分隔文件),实际上就是这样。
$lines = explode(PHP_EOL, $data);
$array = array_map('str_getcsv', $lines);
print_r($array);
你可能会想用一个修剪和一些命名的键来装饰它,但这已经完成了大部分的工作 :)
然后,如果你想得到所有最后的值,然后把它们相加。
$values = array_column($array, 6);
$avg = array_sum($values)/count($values);