我有一个正常工作的函数,除了当您使用输入值0时。我试着四处搜索,看看0是否等于NULL,或者我是否做错了什么。
当输入0时,输出大于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 );
你的逻辑不正确。Switch语句检查是否相等。您的代码正在检查$data
是否等于TRUE
或FALSE
。
case( $data < 20 ):
将计算为:
case( TRUE ):
因为0 < 20
.
由于0
不等于TRUE
,而是等于FALSE
(转换后),所以运行第二种情况。
基本上,您不能将switch case
用于<
或>
,而只能用于==
。
这不是切换语句的方式。它们将案例与您提供给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
在这种情况下使用switch是错误的
用这个
http://sandbox.phpcode.eu/g/b4053.php<?php
function strengthPlan( $data ) {
return ($data > 20) ? 'advanced strenght' : 'standard strenght';
}
echo strengthPlan( 0 );