如果$ value大于0,一切正常,但如果$ value设置为0,则case switch打印出Billion: - )。
由于手册没有说明值0没有被评估,所以这对我来说是一个麻烦的错误。 http://php.net/manual/en/control-structures.switch.php
$value = 0;
switch ($value) {
case $value >= 1000000000:
print 'Billion';
break;
case $value >= 1000000:
print 'Million';
break;
case $value >= 1000 :
print 'Thousand';
break;
default:
print 'Ten';
break;
}
Output: Billion :-)
答案 0 :(得分:5)
这是因为switch case不接受可以计算的表达式。您应该使用if else
。例如开关盒:
$value = 2;
switch($value) {
case 2:
print "two";
break;
default:
print "default";
}
例如if else
:
$value = 3;
if( $value > 2 ) {
print "greater than 2";
} elseif($value > 1) {
print "greater than 1";
} else {
print "default";
}
答案 1 :(得分:3)
$value = 0;
switch (true) {
case ($value >= 1000000000):
print 'Billion';
break;
case ($value >= 1000000):
print 'Million';
break;
case ($value >= 1000) :
print 'Thousand';
break;
default:
print 'Ten';
break;
}
答案 2 :(得分:0)
switch
语句对案例中的值执行相等测试。 PHP正在评估您的比较,因此$value = 0
成为案例false
。 false被认为是equal to 0
,因此第一种情况匹配。
$value = 0;
switch (true) {
case ($value >= 1000000000):
print 'Billion';
break;
case ($value >= 1000000):
print 'Million';
break;
case ($value >= 1000) :
print 'Thousand';
break;
default:
print 'Ten';
break;
}