【问题标题】:Gradually store increment number in array? - calculate avg rollover逐渐将增量数存储在数组中? - 计算平均翻转
【发布时间】:2014-07-31 07:41:41
【问题描述】:

(为了便于理解,我认为最简单的方法是使用累积奖金翻转) 我有这个数据: http://sqlfiddle.com/#!2/e5ea89/1/0

我通过检查结果中的前一个当前行来获得当前/最新的累积奖金翻转,如此处所示,然后增加 $rollovercount:

$rollovercount = 0;
$previous = '';
$stmt = DB::Prepare("
        SELECT jvt.jackpotvalue, jt.dateofjackpot
        FROM JackpotTable jt
        LEFT JOIN JackpotValueTable jvt on jvt.jackpotid = jt.jackpotid
        ORDER BY jt.dateofjackpot desc
        ");
$stmt->execute();
$result = $stmt->get_result();

if ($result)
{
    while ($row = $result->fetch_object())
    {
        $current = $row->jackpot;

        if ($current < $previous) 
        {
            $rollovercount ++;
        }
        $previous = $current;
    }
 }
 return $rollovercount ;

这很好用,但现在我想获得平均翻转次数。 如果您看到示例数据,最新的翻转计数为 3(累积奖金值从上一行下降)。 在此之前,它是 5 次翻转。 在此之前,它是 2 次翻转。 在此之前,它是 1 次翻转。 在此之前是 2 次翻转。

所以 3+5+2+1+2=13 和 13/5=2.6 所以 2.6 是平均翻转次数。

如果有可能以某种方式将翻转存储在一个数组中,例如 $rollovercount = array(3, 5, 2, 1, 2);然后可能使用 array_sum($rollovercount) 并将其除以 count($rollovercount)

【问题讨论】:

  • 发生翻转时,将当前翻转计数添加到数组中,并将$rollovercount重置为0。
  • 是的,但我将如何在代码中执行此操作 - 将当前翻转计数放入数组中,然后继续检查下一个翻转计数?

标签: php mysql average increment


【解决方案1】:

你可以这样做:

$rollovercount = 0;
$rolloverCountArray = array();
$previous = '';

$stmt = DB::Prepare("
    SELECT jvt.jackpotvalue, jt.dateofjackpot
    FROM JackpotTable jt
    LEFT JOIN JackpotValueTable jvt on jvt.jackpotid = jt.jackpotid
    ORDER BY jt.dateofjackpot desc
    ");
$stmt->execute();

$result = $stmt->get_result();

if ($result)
{
    while ($row = $result->fetch_object())
    {
        $current = $row->jackpot;

        if ($current < $previous) 
        {
            $rollovercount ++;
        } else {
            $rolloverCountArray[] = $rollovercount;
            $rollovercount = 0;
        }
        $previous = $current;
    }
}
return array(
    "rollovercountLast" => $rollovercount,
    "rolloverCountAvg"  => array_sum($rolloverCountArray) / count($rolloverCountArray)
);

我还没有测试过这段代码,但我希望它能让你知道如何在代码中解决这个问题。祝你好运!

【讨论】:

  • 感谢 hade 做出一些调整: if ($current >= $previous) and: (array_sum($rolloverCountArray)+$rollovercount) / (count($rolloverCountArray)+1) 因为数组不会'不包含“最新/第一个”计数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
相关资源
最近更新 更多