switch($rank)
{
case 1:
$speed = 50;
break;
case 2:
$speed = 48;
break;
case 3:
$speed = 46;
break;
case 4:
$speed = 44;
break;
case 5:
$speed = 42;
break;
case 6:
$speed = 40;
break;
case 7:
$speed = 39;
break;
case 8:
$speed = 38;
break;
case 9:
$speed = 37;
break;
case 10:
$speed = 36;
break;
case 21 > '$rand' >10:
$speed = 35;
break;
case 31 > '$rand' > 20:
$speed = 34;
break;
case 41 > '$rand' > 30:
$speed = 32;
break;
case 71 > '$rand' > 50:
$speed = 31;
break;
case 101 > '$rand' > 70:
$speed = 30;
break;
case 201 > '$rand' > 100:
$speed = 29;
break;
case 301 > '$rand' > 200:
$speed = 28;
break;
case 401 > '$rand' > 300:
$speed = 27;
break;
case 501 > '$rand' > 400:
$speed = 26;
break;
}
在运行的时候报错>符号有误 这是什么情况啊
首先要说的是,你的逻辑没有错,但是你的基础语法错了。php没有连级这种判断!!!所以将它并列分开判断就可以!!将所有类似【case 21> '$rand' > 10:】这种代码,修改为如下类似模式即可:
你的代码……问题很多。
只好一一道来:
阶段一:
首先'$rand'是一个字符串变量,他的值就是字符串'$rand',布尔值是true。这个判断条件写错了吧。我猜是想写前面的$rank
之后条件这里要使用&&把条件连起来,因为没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。
php手册:http://php.net/manual/zh/lang...
所以其实应该写成10 >= $rank && $rank >2
如果连续写,那么至少每个阶段都要加括号,那么就成了case (10 >= $rank) >2,如果$rank = 5,那就变成布尔值true > 2,这是什么鬼……
你觉得结果会是啥?
这个也是有相关文档的:http://php.net/manual/zh/lang...
阶段二:
来看我简写后的这段代码
这个运行结果是
1,5,15,20.
,可以认为$rank匹配了结果ACDE。那么如果我令$rank = 0,按照上面的猜想,是不是应该匹配到default,即结果E,speed等于20呢?
你可以运行以下,很可惜speed = 5,匹配了C。
为什么会符合$rank = 0时,会switch到case 10 >= $rank && $rank >2?
阶段三
改写上面的代码:
结果是:
1,5,15,20,20.
阶段二中,$rank = 0时,会switch到case 10 >= $rank && $rank >2的理由,就是$rank = 0,$rank的布尔值是false;case条件
case 10 >= 0 && 0 > 2
为false,(false == false)就为true,所以会匹配到这个条件。综上
你可以理解为,
switch($a) case ($b): /*code_b*/ break; case ($c): /*code_c*/ break; default: /*code_default*/
其实可以理解为:注意break的存在,如果没有break,那么这个if就更复杂了,会一直向下匹配到所有匹配条件,用if就难写了。
先去看看php官方文档吧。case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除引用成为简单类型。
php switch语法
echo '$rand' 看一下是什么值。
dacuole
这问题,你其实该去看文档,一行一行的看
你这是哪里学来的用法,谁教过你case里能这么写了?
对呀 case后怎么还有比较运算符啊
case后面没法支持运算符