【问题标题】:PHP: get rank value and convert in level - function()PHP:获取排名值并转换级别 - 函数()
【发布时间】:2016-02-22 19:28:35
【问题描述】:

我有一个函数,它必须转换排名值(即 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 的未定义值。

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

【问题讨论】:

  • 如果 ( $rank = 0 && $rank >= 5 ) 怎么可能
  • 了解===if() 中使用时的区别...您会丢弃排名值,因此ALL 排名变为0,因为你有$rank = 0 而不是$rank == 0。因为等级不能同时是0 和同时大于5,所以这些测试都没有成功,并且 $level 最终未定义。
  • 第二个 $rank = 0 ???它没有比较
  • 对于未定义的添加 else{$level = "";}

标签: php math operators


【解决方案1】:

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

1)

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

2)

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

解释一个数字如何小于小于 6,同时大于大于 20...

【讨论】:

  • 真正的变量如何一次包含两个值...有效点
【解决方案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';
}

【讨论】:

  • U 修复了 ist 条件也检查了其他条件
【解决方案3】:

看起来您在每个if 语句中都使用&lt;= 作为第一个条件。尝试切换到&gt;=

【讨论】:

    【解决方案4】:

    我会定义一个数组,因为你的 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;
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2018-05-28
      • 1970-01-01
      • 2013-01-11
      • 2010-09-13
      相关资源
      最近更新 更多