切换循环无法识别零“0”php

max*_*max 0 php

我有这个简单的函数可以将用户的评论数量转换为成员类型。

function checkMemberN($numMessages){
    $n= $numMessages;

    switch ($n) {
        case ($n<50): $type="New"; break;
        case ($n>=50 && $n<250):$type="Frequent";break;
        case ($n>=250 && $n<1000): $type="Master";break;
        default: $type="undefinded";
    }   

    return $type;   
}   

echo checkMemberN(0);
Run Code Online (Sandbox Code Playgroud)

看起来它不能识别零 (0),因为当我输入 1 或更高的数字时,它会检索正确的用户类型。我究竟做错了什么?

Ale*_*cco 6

当您使用 时switch,将选择返回值等于给定值的第一种情况。在这种情况下,您的参数(零)是 false-y 值。这就是为什么选择第一个返回的情况false:“频繁”。要修复它,您可以执行以下操作:

if ($n<50) {
  $type = "New";
} else if ($n>=50 && $n<250) {
  $type = "Frequent";
} else if ($n>=250 && $n<1000) {
  $type = "Master";
} else {
 $type = "undefined";
}
Run Code Online (Sandbox Code Playgroud)

如果您仍然想使用switch,您可以将参数更改为true

switch (true) {
    case ($n<50): $type="New"; break;
    case ($n>=50 && $n<250):$type="Frequent";break;
    case ($n>=250 && $n<1000): $type="Master";break;
    default: $type="undefinded";
}    
Run Code Online (Sandbox Code Playgroud)

在这里,将使用返回 true 的第一种情况。