为什么这个功能在php中不起作用?

时间:2011-10-29 16:06:03

标签: php function

这是我的功能,

这意味着要获得用户级别所需的xp数量,直到下一级别,它只能通过级别1到2,但是如果输入级别3所需的xp则失败。

XP每级翻倍,因此从1级到2级是10,2到3是20,3到4是40等;

$ user ['xp']是一个更好解释的int,下面是函数返回不同值的一些示例。

  1. $ user ['xp'] == 1,级别1,xpGot 1,xpNeeded 9,10%
  2. $ user ['xp'] == 5,级别1,xpGot 5,xpNeeded 5,50%
  3. $ user ['xp'] == 9,级别1,xpGot 9,xpNeeded 1,90%
  4. $ user ['xp'] == 10,级别2,xpGot 0,xpNeeded 20,0%
  5. $ user ['xp'] == 15,级别2,xpGot 5,xpNeeded 15,25%
  6. $ user ['xp'] == 29,level 2,xpGot 19,xpNeeded 1,95%
  7. 7。 $ user ['xp'] == 30,级别2,xpGot 0,xpNeeded 0,0% 它在那之后失败了。

    function calculateLevel($xpGot) {
        $level = 1;
        $xpNeeded = 10;
    
        while ($xpGot >= $xpNeeded) {
            $level++;
            $xpGot %= $xpNeeded;
            $xpNeeded *= 2;
        }
    
        if ($xpGot < $xpNeeded) {
            $xp = $xpGot / $xpNeeded * 100;
            echo '<p>Level: ' . $level . '</p>';
            echo '<div class="displayBarWrap" title="' . $xpGot . '/' . $xpNeeded . ' XP (' . $xp . '%)">
                  <p>XP:</p>
                <div class="displayBar"><div style="width: ' . $xp . '%;"></div></div></div>';
        }
    }
    
    calculateLevel($user['xp']);
    

3 个答案:

答案 0 :(得分:4)

我认为您需要关注:将%=替换为-=

$xpGot -= $xpNeeded;

答案 1 :(得分:3)

采取这一行

$xpGot %= $xpNeeded;

如果$ xpGot为15或45,则没有区别,% 10仍将返回5.模数运算符将左操作数除以右并返回余数。

如@scessor建议的那样将其更改为-=可能就是你要找的。

答案 2 :(得分:0)

通过修复其他提到的内容以及回声中可能出现的错误,这对我有用:

<?php
    function calculateLevel($xpGot) {
        $level = 1;
        $xpNeeded = 10;

        if ($xpGot < $xpNeeded) /* NEW! */
            return;

        while ($xpGot >= $xpNeeded) {
            $level++;
            $xpGot -= $xpNeeded;  /* FIXED (other answers!) */
            $xpNeeded *= 2;
        }
        if ($xpGot < $xpNeeded) {
            $xp = $xpGot / $xpNeeded * 100;
            echo '<p>Level: ' . $level . '</p>';

            /* FIXED ? */
            echo '<div class="displayBarWrap" title="' . $xpGot . '/' . $xpNeeded . ' XP (' . $xp . '%)"> <p>XP:</p> <div class="displayBar"><div style="width: ' . $xp . '%;"></div></div></div>';
        }
    }

    calculateLevel($user['xp']);

?>