У меня есть этот фрагмент кода, который проходит от 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
do echo "You are up to level $i<br />";
и он будет проходить вплоть до текущего уровня, на который вы получили EXP.
Но все же .. не работает, когда я хочу просто вернуть число.
Это работает лучше, чем ваша функция:
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
равно нулю.
Верните $ i вместо этого, потому что он всегда «0»
if ($exp > $aLevels[$i-1]) { return $i; }
Вы никогда не меняете $myLevel
, поэтому он всегда останется на уровне 0
.
Попробуйте вернуть $i
вместо $myLevel
, так как $i
действительно меняется:
function getLevelByExp($exp) { $aLevels = getExperienceByLevel(99); for ($i = 1; $i < 100; $i++) { if ($exp > $aLevels[$i-1]) { return $i; } } }