PHP Получить опыт по уровню

У меня есть этот фрагмент кода, который проходит от 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.

Но все же .. не работает, когда я хочу просто вернуть число.

Related of "PHP Получить опыт по уровню"

Это работает лучше, чем ваша функция:

 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; } } }