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);然后看看你需要多少经验才能升级6你这样做,echo $aLevels[5];因为它是一个数组。

现在我正在尝试反向操作。通过经验获得等级。

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

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

当被调用getLevelByExp(1124);或内部的任何数字时,它似乎返回零。但是,当您将回声放在该语句中时,它似乎起作用了。

Like 而不是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

而是返回 $i,因为它总是 '0'

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 回答