PHP:获取排名值并转换为level - function()

时间:2016-02-22 19:28:36

标签: php math operators

我有一个必须转换等级值(即35 exp)并转换为相关等级(即等级2)的函数

function level($rank) {
        if ( $rank  = 0    && $rank >= 5    )   { $level = 1; }
    elseif ( $rank <= 6    && $rank >= 20   )   { $level = 2; }
    elseif ( $rank <= 21   && $rank >= 50   )   { $level = 3; }
    elseif ( $rank <= 51   && $rank >= 100  )   { $level = 4; }
    elseif ( $rank <= 101  && $rank >= 500  )   { $level = 5; }
    elseif ( $rank <= 501  && $rank >= 1000 )   { $level = 6; }
    elseif ( $rank <= 1001 && $rank >= 2500 )   { $level = 7; }
    elseif ( $rank <= 2501 && $rank >= 5000 )   { $level = 8; }

    return $level;
}

但是这不起作用,我得到$level的未定义值。

错误在哪里?感谢所有可以提供帮助的人

4 个答案:

答案 0 :(得分:2)

=用于分配

==用于比较

function level($rank) {
        if ( $rank  => 0    && $rank <= 5    )   { $level = 1; }
    elseif ( $rank >= 6    && $rank <= 20   )   { $level = 2; }
    elseif ( $rank >= 21   && $rank <= 50   )   { $level = 3; }
    elseif ( $rank >= 51   && $rank <= 100  )   { $level = 4; }
    elseif ( $rank >= 101  && $rank <= 500  )   { $level = 5; }
    elseif ( $rank >= 501  && $rank <= 1000 )   { $level = 6; }
    elseif ( $rank >= 1001 && $rank <= 2500 )   { $level = 7; }
    elseif ( $rank >= 2501 && $rank <= 5000 )   { $level = 8; }

    return $level;
}

您还可以创建函数以使其更容易并避免多个条件

<?php

function getLevel($rank) {
    $levels = [
        [
            'minimum' => 0,
            'maximum' => 5,
            'level'   => 0
        ],
        [
            'minimum' => 6,
            'maximum' => 10,
            'level'   => 1
        ],
        [
            'minimum' => 11,
            'maximum' => 20,
            'level'   => 2
        ],
    ];

    foreach($levels as $level) {
        if($rank >= $level['minimum'] && $rank <= $level['maximum'])
            return $level['level'];
    }

    return 'Infinite';
}

答案 1 :(得分:2)

你有错别字和主要的逻辑缺陷。

1)

    if ( $rank  = 0    && $rank >= 5    )   { $level = 1; }
                 ^--should be ==

2)

elseif ( $rank <= 6    && $rank >= 20   )   { $level = 2; }
               ^----------------^

解释单个数字如何 LESS <6>,同时 LARGER 比20 ...

答案 2 :(得分:1)

看起来您在每个<=语句中使用if作为第一个条件。尝试将其切换为>=

答案 3 :(得分:0)

我会定义一个数组,因为你的if会变得太复杂:

function level($userRank) {
    $ranks = array(
        1=>array('min'=>0,'max'=>5),
        2=>array('min'=>6,'max'=>20),
    );

    foreach($ranks as $level=>$rank) {
        if($rank['min']<= $userRank && $rank['max']>= $userRank) {
            return $level;
        }
    }

}