我有一个必须转换等级值(即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
的未定义值。
错误在哪里?感谢所有可以提供帮助的人
答案 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;
}
}
}