逐渐存储数组中的增量数? - 计算平均翻转

时间:2014-07-31 07:41:42

标签: php mysql average increment

(为了便于理解,我认为最简单的方法是使用累积奖金翻转) 我有这些数据: 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)

1 个答案:

答案 0 :(得分: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)
);

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