Php 在最后一部分中,排名函数不正确。我如何使其达到100%的完整性?

Php 在最后一部分中,排名函数不正确。我如何使其达到100%的完整性?,php,Php,在我的基于文本的游戏中,我有一个名为getRank的排名函数,它允许用户根据他们所称赞的分数获得指定的排名。 然而,当最后一个排名达到时,它将保持在0%,应该接近最终排名的100% 我试着将最后一个等级的分数从7501延长到10000,检查是否在7501到10000之间,以此类推,而不是在7500上超过它,但这似乎不起作用 我在这里做错了什么 代码: <?php function getRank($punten) { if($punten >= 0 &&

在我的基于文本的游戏中,我有一个名为getRank的排名函数,它允许用户根据他们所称赞的分数获得指定的排名。 然而,当最后一个排名达到时,它将保持在0%,应该接近最终排名的100%

我试着将最后一个等级的分数从7501延长到10000,检查是否在7501到10000之间,以此类推,而不是在7500上超过它,但这似乎不起作用

我在这里做错了什么

代码:

<?php

function getRank($punten)
{  
    if($punten >= 0 && $punten <= 350){
        $rank = array(1, 0, 350);  
    }

    elseif($punten >= 351 && $punten <= 750){
        $rank = array(2, 351, 750);
     }
    elseif($punten >= 751 && $punten <= 1200){       
        $rank = array(3, 751, 1200);
    }    
    elseif($punten >= 1201 && $punten <= 1750){
        $rank = array(4, 1201, 1750);
    }   
    elseif($punten >= 1751 && $punten <= 2400){
        $rank = array(5, 1751, 2400);
    }   
    elseif($punten >= 2401 && $punten <= 3200){      
        $rank = array(6, 2401, 3200);
    }    
    elseif($punten >= 3201 && $punten <= 4200){
        $rank = array(7, 3201, 4200); 
    }  
    elseif($punten >= 4201 && $punten <= 5600){
        $rank = array(8, 4201, 5600); 
    }
    elseif($punten >= 5601 && $punten <= 7500){
        $rank = array(9, 5601, 7500); 
    }  
    elseif($punten > 7500){
        $rank = array(10);
    }      
    if(!isset($rank)){
        return array(1, 0); 
    }       
    if($rank[0] == 10){
        $vordering = 0;
    } 
    else{        
        $vordering = floor((($punten - $rank[1]) / (($rank[2] - $rank[1]) + 1)) * 100);     
        return array($rank[0], $vordering);
    }
    $tmpRank = getRank($data->ervaringspunten);$oudeRank = $data->rank;$data->rank = $tmpRank[0];$data->rankvord = $tmpRank[1];
}


         

是的,读起来好多了。我完全重写了您的代码,因为仍然很难理解它的功能。如果。。。如果。。。艾尔塞夫。。。。其他的如果。。。。它们中的else。虫子很容易就这样溜走了

我的基本想法是,你可能打算这样做:

function getRank($points)
{
    $limits = [350, 750, 1200, 1750, 2400, 3200, 4200, 5600, 7500, 10000];
    $previousLimit = 0;
    foreach ($limits as $rank => $limit) {
        if ($limit >= $points) {
          $percentage = floor((($points - $previousLimit) / 
                              (($limit - $previousLimit))) * 100);  
          return [$rank, $percentage];
        }
        $previousLimit = $limit;
    }
    return "error";
}

print_r(getRank(1550));
这将返回:

Array ( [0] => 3 [1] => 63 ) 
请注意,尽管我是荷兰人,但我在编程时使用一种语言,因此阅读您的
$punten
对我来说不是问题。坚持使用英语可以保持它的一致性,并且对于不懂荷兰语的人(即:大多数程序员)来说也是可读的。我不担心上限。比如:

print_r(getRank(15550));
因此将返回:

error
你可以很容易地用你想要的任何东西来代替它

创建好的代码需要实践,但坏的代码总是会出错:1。大量的重复。2.难以阅读。3.复杂的执行流程。尽量避免这些


另一个有用的链接:

是的,读起来好多了。我完全重写了您的代码,因为仍然很难理解它的功能。如果。。。如果。。。艾尔塞夫。。。。其他的如果。。。。它们中的else。虫子很容易就这样溜走了

我的基本想法是,你可能打算这样做:

function getRank($points)
{
    $limits = [350, 750, 1200, 1750, 2400, 3200, 4200, 5600, 7500, 10000];
    $previousLimit = 0;
    foreach ($limits as $rank => $limit) {
        if ($limit >= $points) {
          $percentage = floor((($points - $previousLimit) / 
                              (($limit - $previousLimit))) * 100);  
          return [$rank, $percentage];
        }
        $previousLimit = $limit;
    }
    return "error";
}

print_r(getRank(1550));
这将返回:

Array ( [0] => 3 [1] => 63 ) 
请注意,尽管我是荷兰人,但我在编程时使用一种语言,因此阅读您的
$punten
对我来说不是问题。坚持使用英语可以保持它的一致性,并且对于不懂荷兰语的人(即:大多数程序员)来说也是可读的。我不担心上限。比如:

print_r(getRank(15550));
因此将返回:

error
你可以很容易地用你想要的任何东西来代替它

创建好的代码需要实践,但坏的代码总是会出错:1。大量的重复。2.难以阅读。3.复杂的执行流程。尽量避免这些


另一个有用的链接:

您能尝试格式化您的代码以便我们阅读吗?我想我现在已经完成了?这是我在这里的第一篇文章,所以我必须弄清楚这将如何发展我理解困难。你的代码目前有两行,你真的是这样写的吗?在编码中,保持行相对较短是正常的,比如不超过120个字符。看见例如,您可以在每个分号后开始一行新行,即
“;”,这样做很容易。更好的格式化代码更易于阅读和调试。感谢您提供的提示。从现在起,我会把它记下来。你能试着格式化你的代码以便我们阅读吗?我想我现在已经做了?这是我在这里的第一篇文章,所以我必须弄清楚这将如何发展我理解困难。你的代码目前有两行,你真的是这样写的吗?在编码中,保持行相对较短是正常的,比如不超过120个字符。看见例如,您可以在每个分号后开始一行新行,即
“;”,这样做很容易。更好的格式化代码更易于阅读和调试。感谢您提供的提示。从现在起我会注意到的。它看起来确实干净多了,谢谢你。我会记住,变量也要用英语,以便在出现问题时更容易转换。然而,它也没有达到目的。一旦达到最后一级,它就会一直朝着0%的方向移动。基本上,我正试图以一定的分数获得100%的最终等级,就像其他等级一样。@Alcapone1993:我测试了代码,但我没有发现它在达到最终等级后一直保持在0%的水平上:在8550时,它以42%返回等级9,任何超过10000的都将返回
错误
,正如代码中所写的那样。如果你想要超过10000的百分比,你必须说明它应该是什么。我确实试过你给我的代码部分。而且它看起来更干净,所以我将输入样式添加到现在重新编写的部分。不幸的是,我忽略了脚本的另一部分,它也指导了积分系统。因此,它在一开始就不起作用。我对另一个脚本做了一些修改,删除后它就开始工作了。您的连接更短、更干净,因此我选择了该解决方案。谢谢你的帮助。看起来确实干净多了,谢谢你。我会记住,变量也要用英语,以便在出现问题时更容易转换。然而,它也没有达到目的。一旦达到最后一级,它就会一直朝着0%的方向移动。基本上,我正试图以一定的分数获得100%的最终等级,就像其他等级一样。@Alcapone1993:我测试了代码,但我没有发现它在达到最终等级后一直保持在0%的水平上:在8550时,它以42%返回等级9,任何超过10000的都将返回
错误
,正如代码中所写的那样。如果你想要超过10000的百分比,你必须说明它应该是什么。我确实试过你给我的代码部分。而且它看起来更干净,所以我将输入样式添加到现在重新编写的部分。不幸的是,我忽略了脚本的另一部分,它也指导了积分系统。因此,它在一开始就不起作用。我改变了其他脚本的一些东西,它开始工作了