为什么这个函数在php中不起作用?

为什么这个函数在php中不起作用?,php,function,Php,Function,这是我的功能 这意味着在进入下一个级别之前,用户可以获得所需的xp量,但只能通过级别1到2工作,如果输入了级别3所需的xp,则会失败 XP是每级的两倍,所以从1级到2级是10,2到3级是20,3到4级是40等等 $user['xp']是一个int,为了更好地解释,这里有一些函数返回不同值的示例 $user['xp']==1,级别1,xpGot 1,xpNeeded 9,10% $user['xp']==5,级别1,xpGot 5,xpNeeded 5,50% $user['xp']==9,级别1

这是我的功能

这意味着在进入下一个级别之前,用户可以获得所需的xp量,但只能通过级别1到2工作,如果输入了级别3所需的xp,则会失败

XP是每级的两倍,所以从1级到2级是10,2到3级是20,3到4级是40等等

$user['xp']是一个int,为了更好地解释,这里有一些函数返回不同值的示例

  • $user['xp']==1,级别1,xpGot 1,xpNeeded 9,10%
  • $user['xp']==5,级别1,xpGot 5,xpNeeded 5,50%
  • $user['xp']==9,级别1,xpGot 9,xpNeeded 1,90%
  • $user['xp']==10,二级,xpGot 0,xpNeeded 20,0%
  • $user['xp']==15,2级,xpGot 5,xpNeeded 15,25%
  • $user['xp']==29,二级,xpGot 19,xpNeeded 1,95%
  • 7$用户['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']);
    
    函数calculateLevel($xpget){
    $level=1;
    $xp=10;
    而($xpGot>=$xpNeeded){
    $level++;
    $xpGot%=$xpNeeded;
    $xp*=2;
    }
    如果($xpGot<$xpNeeded){
    $xp=$xpget/$xpNeeded*100;
    回显“级别:”.$Level.“

    ”; 回声' XP:

    '; } } calculateLevel($user['xp']);
    走这条线

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


    按照@scessor的建议将其更改为
    -=
    ,这可能是您想要的。

    我认为您需要以下内容:将
    %=
    替换为
    -=

    $xpGot -= $xpNeeded;
    

    有了其他提到的修复,以及echo中可能出现的错误,这对我来说很有用:

    <?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']);
    
    ?>
    
    
    
    用户['xp']的值是多少?三级的xpget值应该是多少?因为“%”操作将xpget的值降低到比xpNeeded低的程度,因此while循环只运行一次,永远不会达到级别=3。不确定你是否想这样做…第3级应该是10+20+40,所以70,因为我使用的是模数,而不是减数。这是可行的,但是如果用户一次升级2级,它会从每一级升级除法余数吗?这就是我试图用modolus实现的东西?但是如果我得到1xp,它现在就失败了。它把所有东西都抛到了负lolMy坏了,是不是一个打字错误现在似乎正在工作,谢谢,只是现在进一步测试它:)用1000的值试试,我不会超过2级,使用wamp PHP5.3.5你也需要使用其他人发布的修复程序<代码>$xpGot-=$xpNeeded