【发布时间】:2011-11-14 20:43:47
【问题描述】:
我正在使用 google 图形库在 php 中创建一个图表来显示 StarCraft II APM 数据,但我无法思考这一切的逻辑。我不确定这是最好的提问地点,但我别无选择。这有点难以解释,所以如果需要任何澄清,请告诉我。
我有一组键和值。关键是以秒为单位的时间。该值是那一秒执行的操作。我的数据源省略了 0 个动作的秒数。 示例:
seconds actions
1 10
3 5
4 7
7 15
etc etc
我想要做的是绘制这些数据,显示每分钟的平均操作数,每隔一秒的时间间隔。直到第一分钟,我都会使用已经过去的可用秒数。
这是我当前的代码
$p1_total = 0;
foreach ($p1 as $seconds => $actions) {
$p1_total = $p1_total + $actions;
$data['player1'][$seconds] = round($p1_total * 60 / $seconds);
}
然而,这会计算一个滚动平均值,因为它会继续加起来 $p1_total,我真正需要的是每个时间间隔过去 60 秒的平均值。
我只是无法理解如何干净地编写代码。我知道我需要用过去 60 秒的操作数替换 $p1_total。但收集这就是让我感兴趣的东西。我应该如何在不处理大量变量的情况下动态设置它?请记住,我的秒数不是每秒,所以我不能只抓取数组中的最后 60 个条目,因为它们可能超过 60 秒。
我曾考虑在数组中插入值来弥补空白点,但如果不使平均值偏斜,我想不出任何合理的方法。 或者有什么方法可以让我在数学上更干净。
我感谢所有可以提供帮助的人。如果有更多信息有帮助,请告诉我。从表面上看,这感觉是一个非常简单的问题,但它确实被难住了。 :(
【问题讨论】:
-
只是为了正确理解,密钥从
1开始并继续超过60?所以在时间t你想要从max(0,t-60)到t的所有键,然后对相应的值(动作)求和? -
是的。键从 1 开始,可以继续输入任何数字。它通常不会超过一个小时,但不能保证。我基本上需要每组60的总和。 1-60、2-61、3-62 等。但是由于缺少一些值,我不能只抓住这 60 个键。 :(