我正在尝试做的一个示例将更明确:
var_dump($opti_point); //int 0
if ($opti_point>=0 && $opti_point < 25) echo 'good';//echoing good
switch ($opti_point) {
case ($opti_point>= 0 && $opti_point < 25):
$test = 0;
break;
case ($opti_point >= 25 && $opti_point < 50):
echo 'we are in this case'; // This case is called !
$test = 2;
break;
default:
test = 0;
break;
}
这里有诀窍吗?
THX
答案 0 :(得分:3)
不幸的是,你无法在“案例”中进行比较...... 仅当值可以具有有限数量的值之一时才使用开关:
switch ( $val ) {
case 1:
echo "Got 1";
break;
case 2:
echo "Got 2";
break;
default:
echo "Got invalid value";
}
解决方法是使用:
switch (true) {
case ($opti_point>= 0 && $opti_point < 25):
$test = 0;
break;
case ($opti_point >= 25 && $opti_point < 50):
echo 'we are in this case';
$test = 2;
break;
default:
test = 0;
break;
}
哪个会起作用,但有点难看......
此外,您在echo we are in this case';
中遗漏的单引号应为echo 'we are in this case';
你应该使用if = =)
答案 1 :(得分:3)
如果您在案例中进行比较,则需要将switch
参数更改为true
false
。
答案 2 :(得分:1)
我认为使用switch语句是一种非常糟糕的方式,你不应该在这些情况下放置条件语句......事实上,我确信这在其他语言中是非法的,而且我和#39;我不确定它是否应该在PHP中运行。改为使用多个连接的if-else条件:
if ($i == 0) {
echo "i equals 0";
} elseif ($i == 1) {
echo "i equals 1";
} elseif ($i == 2) {
echo "i equals 2";
}
答案 3 :(得分:1)
您对switch-case
的工作方式存在误解。 Case
不要将您的表达测试为布尔值!
将其值与“切换”值进行比较!
以下是解释:
$opti_point>= 0 && $opti_point < 25
评估为真,哪个整数表示为1,因为PHP
可以自己处理类型,它将true转换为1并将其与switch中的值0进行比较
$opti_point >= 25 && $opti_point < 50
的计算结果为0,整数为0,所以...就是你的情况;)
答案 4 :(得分:1)
我会和你一起实现代码
var_dump($opti_point); //int 0 , or false --- you should use TRUE
if ($opti_point>=0 && $opti_point < 25) echo 'good';//echoing good
switch ($opti_point) { // chose the case that is $opti_point (0 or false)
case ($opti_point>= 0 && $opti_point < 25): // true, so go to next
$test = 0;
break;
case ($opti_point >= 25 && $opti_point < 50): //false si this is the wan I pick
echo 'we are in this case'; // This case is called !
$test = 2;
break; // ingore the rest
default:
test = 0;
break;
}
你应该在开关中使用TRUE
答案 5 :(得分:1)
您没有比较您认为比较的内容。这是我认为你想要的代码。
var_dump($opti_point); //int 0
if ($opti_point>=0 && $opti_point < 25) {
$test = 0;
echo 'You are now here!';
} elseif ($opti_point >= 25 && $opti_point < 50) {
$test = 2;
} else {
test = 0;
}
在您的示例中,您正在比较逻辑语句的结果...
($opti_point>=0 && $opti_point < 25) // true
$ opti_point的值
0 // false
因此,PHP实际上将您在整数中的想法转换为布尔值,以将其与条件语句的结果进行比较。
答案 6 :(得分:1)
如果这是确切的代码,那么试试这个
var_dump($opti_point); //int 0
if ($opti_point>=0 && $opti_point < 25) echo 'good';//echoing good
switch ($opti_point) {
case ($opti_point>= 0 && $opti_point < 25):
$test = 0;
break;
case ($opti_point >= 25 && $opti_point < 50):
echo 'we are in this case'; // This case is called !
$test = 2;
break;
default:
$test = 0;
break;
}
if ($opti_point>=0 && $opti_point < 25) echo 'good';//echoing good
switch ($opti_point) {
case ($opti_point>= 0 && $opti_point < 25):
$test = 0;
break;
case ($opti_point >= 25 && $opti_point < 50):
echo 'we are in this case'; // This case is called !
$test = 2;
break;
default:
$test = 0;
break;
}