我有这段代码循环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 $myLevel
做echo "You are up to level $i<br />";
,它会一直到目前的水平,你已经获得了EXP。
但是,当我想简单地返回一个数字时,仍然没有工作。
答案 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;
}
}
}