所以这是代码 -
$info = 0;
switch ( $info ) {
case ( $info < 11 ):
$ts = "zero";
break;
case ( $info <= 44 && $info >= 11):
$ts = "two";
break;
case ( $info > 44 ):
$ts = "three";
break;
}
echo $ts;
它没有给出零,它给出了&#34;两个&#34;,也许你知道为什么?只有在$ info = 0时才会发生。
答案 0 :(得分:12)
这是因为case
expects a value,不是条件,并且在与switch
参数进行比较之前,您提供的条件已转换为值。< / p>
$info
为0:
$info < 11
为真,因此给出了1。
$info <= 44 && $info >= 11
为假,因此给出0。
$info > 44
为假,因此给出0。
所以它匹配第一个情况,其中$info
值0等于转换为数字的条件,这是第二个。这就是你看到"two"
的原因。
我建议将其更改为if/else
变体:
if ($info < 11) {
$ts = "zero";
} elseif ($info >= 11 && $info <= 44) {
$ts = "two";
} elseif ($info > 44) {
$ts = "three";
}
或者可能更好,因为它删除了无关的检查,并确保始终分配某些值:
if ($info < 11) {
$ts = "zero";
} elseif ($info < 45) {
$ts = "two";
} else {
$ts = "three";
}
答案 1 :(得分:1)
( $info < 11 )
计算结果为true,它不等于$ info,即0,因此不采用此分支( $info <= 44 && $info >= 11)
的计算结果为false,等于$ info(false == 0),因此采用此分支答案 2 :(得分:0)
我认为case
仅支持值而非逻辑语句。也就是说,您可以询问变量是否等于某个值......
switch ( $info ){
case 0:
// something
break;
case 11:
// something else
break;
default:
// otherwise
}
要实现您的目标,您需要使用IF-ELSE-IF
控制结构
答案 3 :(得分:0)
来自手册:
switch语句类似于上面的一系列IF语句 同样的表达。在许多情况下,您可能想要比较相同的 变量(或表达式)具有许多不同的值,并执行a 不同的代码段取决于它等于的值。这是 正是switch语句的用途。
你的代码是相同的:
if($info == ($info < 11 )) {...}
elseif($info == ( $info <= 44 && $info >= 11)) {...}
elseif($info == ( $info > 44 )) {...} ...
但您的正确代码应为:“切换( true )”
$info = 0;
switch ( true ) {
case ( $info < 11 ):
$ts = "zero";
break;
case ( $info <= 44 && $info >= 11):
$ts = "two";
break;
case ( $info > 44 ):
$ts = "three";
break;
}
echo $ts;
或简单地说:
$info = 0;
switch ( true ) {
case ( $info < 11 ):
$ts = "zero";
break;
case ( $info <= 44 ):
$ts = "two";
break;
default:
$ts = "three";
}
echo $ts;
答案 4 :(得分:0)
这是我的切换间隔功能:
function switchi($i,&$var,$case)
{
foreach($case as $interval => $new_val)
{
if(is_int($interval) and $interval == $i)return $var = $new_val;
if(strpos($interval,"-"))
{
$interval_array = explode("-",$interval);
if($interval_array[0]<=$i and $i<=$interval_array[1])return $var = $new_val;
if($interval_array[0]<=$i and !$interval_array[1])return $var = $new_val;
}
}
if(array_key_exists('default',$case))return $var = $case['default'];
}
用法:
$pieces = 6;
switchi($pieces,$multiplier,array(
1 =>60,
2 =>35,
3 =>30,
4 =>25,
5 =>22,
"6-8" =>20,
"9-10" =>18,
"11-20" =>15,
"21-30" =>14,
"31-40" =>13,
"41-50" =>12,
"51-100" =>11,
"101-200" =>10,
"201-300" =>9,
"301-400" =>8,
"401-" =>7,
"default" => 0,
));
echo $multiplier; //20
答案 5 :(得分:0)
您需要以这种格式编写代码:
<?php
$info = 0;
//$info = 14;
switch ( true) {
case ( $info < 11 ):
$ts = "zero";
break;
case ( $info <= 44 && $info >= 11):
$ts = "two";
break;
case ( $info > 44 ):
$ts = "three";
break;
}
echo $ts;
?>