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