我在 php switch case 中遇到了问题。
当我设置 $number=0 时,它应该首先运行 case 但这里代码返回 10-20K ,这是在第二种情况下.
我检查了比较运算符,在 if else 情况下测试了它们,它们返回了正确的值,但这里第一种情况不在 $number=0
上运行为什么会这样? php 认为 0 为假或代码中有错误?
键盘粘贴链接 http://codepad.org/2glDh39K
代码也在这里
<?php
$number = 0;
switch ($number) {
case ($number <= 10000):
echo "0-10K";
break;
case ($number > 10000 && $number <= 20000):
echo "10-20K";
break;
case ($number > 20000 && $number <= 30000):
echo "20-30K";
break;
case ($number > 30000 && $number <= 40000):
echo "30-40K";
break;
case ($number > 40000 && $number <= 50000):
echo "40-50K";
break;
case ($number > 50000 && $number <= 60000):
echo "50-60K";
break;
case ($number > 60000 && $number <= 70000):
echo "60-70K";
break;
case ($number > 70000 && $number <= 80000):
echo "70-80K";
break;
case ($number > 80000 && $number <= 90000):
echo "80-90K";
break;
case ($number > 90000):
echo "90K+";
break;
default: //default
echo "N/A";
break;
}
?>
最佳答案
您几乎正在使用 switch
相反,但不完全是。您需要通过编写 switch(true)
完全反转:
switch (true) { // IMPORTANT CHANGE HERE!
case ($number <= 10000):
echo "0-10K";
break;
case ($number > 10000 && $number <= 20000):
echo "10-20K";
break;
// etc
}
或以其他方式将整个内容更改为 if
/else
:
if ($number <= 10000) {
echo "0-10K";
else if ($number > 10000 && $number <= 20000) {
echo "10-20K";
}
// etc
两个重要说明:
- 反向
switch
通常在您第一次看到它时看起来非常反直觉。如果您对它感到不舒服,请不要使用它。 - 您的条件可以简化——假设它们按顺序出现,每个
$number > X
由于先前条件 ($number <= X
) 中的检查已经失败,因此部分变得多余。但是,可以说保留检查会使代码在面对修改时更加健壮。
关于int = 0 上的 php switch 语句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12660175/