1

1から99をループし、数式であるこのコードがあります。

function getExperienceByLevel ($maxLevel)
{
    $levels = array ();
    $current = 0;

    for ($i = 1; $i <= $maxLevel; $i++)
    {
        $levels[$i - 1] = floor ($current / 4);
        $current +=  floor($i+300*pow(2, ($i/9.75)));
    }

    return $levels;
}

最初にそのように開始し、次にそれが配列であるため、これを行う$aLevels = getExperienceByLevel(99);レベルに到達するために必要なEXPの量を確認します。6echo $aLevels[5];

今、私は逆をしようとしています。EXPでレベルを取得します。

function getLevelByExp($exp) 
{
    $myLevel = 0;
    $aLevels = getExperienceByLevel(99);

    for ($i = 1; $i < 100; $i++)
    {
        if ($exp > $aLevels[$i-1]) 
        { 
            return $myLevel;
        }
    }
}

呼び出されたとき、getLevelByExp(1124);または内部の任意の数の場合、ゼロを返すようです。しかし、そのステートメントの中にエコーを入れるとうまくいくようです。

return $myLeveldoの代わりに、echo "You are up to level $i<br />";EXPを獲得した現在のレベルまで上がります。

しかし、それでも..単に数値を返したい場合は機能しません。

4

3 に答える 3

2

これはあなたの関数よりもうまくいくようです:

function getLevelByExp($exp)
{
        $aLevels = getExperienceByLevel(99);
        for ($i = 0;  $i <= 99;  ++$i)
        {
                //echo "cmp $exp >= aLevels[$i]={$aLevels[$i]}\n";
                if ($exp <= $aLevels[$i])
                        return $i - 1;
        }
        return -1;
}

$expがゼロの場合など、エッジケースの改善が必要です。

于 2012-09-27T06:08:16.903 に答える
1

常に「0」であるため、代わりに$iを返します

if ($exp > $aLevels[$i-1]) { 
        return $i;
    }
于 2012-09-27T05:47:24.410 に答える
0

変更することはないので$myLevel、常ににとどまり0ます。

実際に変更されているように、$iの代わりに戻ってみてください。$myLevel$i

function getLevelByExp($exp) {
    $aLevels = getExperienceByLevel(99);

    for ($i = 1; $i < 100; $i++) {
        if ($exp > $aLevels[$i-1]) { 
            return $i;
        }
    }
}
于 2012-09-27T05:46:12.240 に答える