我有以下功能正常工作,除了你使用输入值为0时我试过去看看0是否等同于NULL或者我做错了什么。
当输入零时,它输出高于20的高级值。任何人都可以解释一下吗?感谢
我打算让开关等同于0-10,11-20,21-30,31-40,41 +但是对于这个例子,我只是使用了两个场景。感谢
**编辑我确实想要值20 :)
function strengthPlan( $data ) {
$data = ( int ) $data;
switch( $data ) {
case( $data <= 19 ):
$result = 'standard strength';
break;
case( $data >= 20 ):
$result = 'advanced strength';
break;
}
return $result;
}
echo strengthPlan( 0 );
答案 0 :(得分:12)
你的逻辑错误。 Switch语句正在检查是否相等。您的代码正在检查$data
是否等于TRUE
或FALSE
。
case( $data < 20 ):
将评估为:
case( TRUE ):
因为0 < 20
。
由于0
不等于TRUE
而是FALSE
(转化后),因此会运行第二种情况。
基本上,您不能将switch case
用于<
或>
,而只能用于==
。
答案 1 :(得分:4)
那不是转换语句的方式。他们将案例与您提供给switch
的值进行比较。这是你应该做的事情:
function strengthPlan($length) {
return $length >= 20 ? 'advanced strength' : 'standard strength';
}
如果您计划使用更多条件,请使用if...elseif
语句,如下所示:
function strengthPlan($length) {
if ($length < 5) return 'micro strength';
elseif ($length < 10) return 'tiny strength';
elseif ($length < 15) return 'small strength';
elseif ($length < 20) return 'standard strength';
elseif ($length < 30) return 'advanced strength';
else return 'super strength!!!!!';
}
它将逐渐降低每个条件,直到它达到它所在的数字。或者,您可以使用这样的查找表样式:
function strengthPlan($length) {
$plans = array(
1 => 'super strength!!!!!',
$length < 30 => 'advanced strength',
$length < 20 => 'standard strength',
$length < 15 => 'small strength',
$length < 10 => 'tiny strength',
$length < 5 => 'micro strength',
);
return $plans[1];
}
这里有一个讨论:http://forums.devnetwork.net/viewtopic.php?f=50&t=113253
答案 2 :(得分:0)
在这种情况下使用开关是错误的
使用此
http://sandbox.phpcode.eu/g/b4053.php
<?php
function strengthPlan( $data ) {
return ($data > 20) ? 'advanced strenght' : 'standard strenght';
}
echo strengthPlan( 0 );