我觉得有点愚蠢,但让我们想象一下,我有一组unix时间戳:
1375110404
1374660925
1374482694
1374242337
1373793867
1373632889
1373187141
1373021668
1372754021
1372599890
我想要实现的目标很简单:我只想计算这10个时间戳之间的平均时差。我无法找到合适的计算方法。
我刚试过的是
1375110404 - 1374660925 = 449479
1374482694 - 1374242337 = 240357
1373793867 - 1373632889 = 160978
1373187141 - 1373021668 = 165473
1372754021 - 1372599890 = 154131
449479 + 240357 + 160978 + 165473 + 154131 = 1170418
1170418 / 5 = 234083,6
但这对我来说看起来不合逻辑。非常感谢任何建议。
编辑:
所有这些邮票都来自php数组。
编辑:
感谢Orangepill指出了正确的方向。这是最终解决方案:
for($cnt = count($array), $res = 0, $i = 1; $i < $cnt; $i++) {
$res += $array[$i-1] - $array[$i];
}
echo $res/$cnt;
计算
1375110404 - 1374660925 = 449479
1374660925 - 1374482694 = 178231
1374482694 - 1374242337 = 240357
1374242337 - 1373793867 = 448470
1373793867 - 1373632889 = 160978
1373632889 - 1373187141 = 445748
1373187141 - 1373021668 = 165473
1373021668 - 1372754021 = 267647
1372754021 - 1372599890 = 154131
449479 + 178231 + 240357 + 448470 + 160978 + 445748 + 165473 + 267647 + 154131 = 2510514
2510514 / 10 = 251051.4
对我来说是正确的。
答案 0 :(得分:1)
最直接的方式就像你描述的那样。
$res =0;
for($x = 1, $num = count($array); $x < $num; $x++){
$res =+ $array[$x] - $array[$x-1];
}
echo $res/($num-1);
答案 1 :(得分:1)
如果时间戳不是严格的时间顺序,current accepted answer将给出不正确的结果。也就是说,负值会扭曲你的平均值。我可能错了,但我想你不想将任何时差算作负值,毕竟你不能在-12秒内跑100米!
我提供此答案作为替代方案,无论传递数组中的时间顺序如何,总是会根据正时间差给出平均值: -
function array_average_diff(array $array)
{
$diff = 0;
for($i = 1; $i < count($array); $i++){
$diff += abs($array[$i] - $array[$i - 1]);
}
return $diff/count($array);
}