PHP按级别获取经验

时间:2012-09-27 05:43:02

标签: php math numbers

我有这段代码循环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才能达到6级别echo $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 $myLevelecho "You are up to level $i<br />";,它会一直到目前的水平,你已经获得了EXP。

但是,当我想简单地返回一个数字时,仍然没有工作。

3 个答案:

答案 0 :(得分: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为零时。

答案 1 :(得分:1)

返回$ i,因为它总是&#39; 0&#39;

if ($exp > $aLevels[$i-1]) { 
        return $i;
    }

答案 2 :(得分: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;
        }
    }
}