我有一个相当简单的问题,但它尚未通过其他问题解决,并希望就此寻求答案。
假设我有一个变量整数,并且如果该值大于一个值且小于另一个值,则希望执行不同的操作。我对此切换的目标基本上是根据$chance
的值发送不同的结果,我最终会有很多情况,因为这是游戏。
switch ($chance)
{
case ($chance < 15):
echo"strike<br>";
case ($chance < 15 && $chance > 50):
echo"Ball<br>";
break;
case ($chance < 50 && $chance > 100):
echo"Single<br>";
break;
case ($chance <= 150 && $chance >= 100):
echo"double<br>";
break;
case ($chance <= 175 && $chance >= 151):
echo"triple<br>";
break;
case ($chance > 200 && $chance > 175):
echo"Ground Rule Double<br>";
break;
case ($chance < 200):
echo"Home Run<br>";
break;
}
现在,我被告知我可以在switch语句中使用条件语,并且我也被告知我不能使用它们。我真的不知道该相信谁。
我所知道的是,目前这个switch语句不能按预期工作。它确实有效,但我会得到随机的回声。这种情况发生在有时机会可能是100并且我将获得本垒打回声。我不确定。
我知道我可以用一系列if
做同样的事情,但如果我能达到相同的结果,那么代码长度会有很大差异。
我想我可以做点什么
case 1:
echo this
case 2:
echo that
etc etc
直到我达到2或300,但我想尽可能避免这种情况。 任何输入都非常感谢
答案 0 :(得分:2)
这不是您使用switch语句的方式。这是一个正确方法的例子:
switch ($a) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
default:
echo 0;
}
对于您想要完成的任务,您需要使用旧的if-else
语句。
if ($chance < 15)
echo"strike<br>";
else if ($chance >= 15 && $chance < 50)
echo"Ball<br>";
else if ($chance >= 50 && $chance < 100)
echo"Single<br>";
else if ($chance <= 150 && $chance >= 100)
echo"double<br>";
else if ($chance <= 175 && $chance >= 151)
echo"triple<br>";
else if ($chance < 200 && $chance > 175)
echo"Ground Rule Double<br>";
else if ($chance <= 200)
echo"Home Run<br>";
答案 1 :(得分:0)
切换语句语法:
http://php.net/manual/en/control-structures.switch.php
<?php
switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
case 2:
echo "i equals 2";
break;
default:
echo "i is not equal to 0, 1 or 2";
}
?>
答案 2 :(得分:0)
要做你想做的事,你应该使用if-else。用于case表达式的值必须是整数,浮点小数或字符串。
答案 3 :(得分:0)
您只需要在switch
中设置 true 。使用switch (true)
中的switch ($chance)
代替。
现在您的代码将是:
switch (true)
{
case ($chance < 15):
echo"strike<br>";
case ($chance < 15 && $chance > 50):
echo"Ball<br>";
break;
case ($chance < 50 && $chance > 100):
echo"Single<br>";
break;
case ($chance <= 150 && $chance >= 100):
echo"double<br>";
break;
case ($chance <= 175 && $chance >= 151):
echo"triple<br>";
break;
case ($chance > 200 && $chance > 175):
echo"Ground Rule Double<br>";
break;
case ($chance < 200):
echo"Home Run<br>";
break;
}
答案 4 :(得分:0)
尽管您的代码中存在一些数学/比较问题,但您似乎打算设置与特定结果相对应的数字范围。在单个脚本执行中达到多个结果似乎也不合适。
鉴于这些事实,您应该使用 if-elseif-else
块。与 switch
块相比,它更合适且更简洁。
使用 switch 块的唯一优势是当您需要进行 1 次评估并根据该评估采取不同的操作时。因为您要进行多次评估,所以使用 switch 没有任何优势——事实上,计算复杂度将相同,并且与 if 块相比,语法的长度将相等或更长。我个人非常讨厌开关块,因此我努力使用任何其他可行的技术来代替。开关块在我的专业项目中很少出现。
通过以 ASC 或 DESC 方式进行,您将只需要在每个条件中使用一个表达式。在每个条件中使用一致的运算符将使您的脚本更易于维护/扩展。
最后,在 PHP 中,elseif
是一个词而不是两个词。
代码:
if ($chance < 0) {
$result = 'Balk'; // ;)
} elseif ($chance < 15) {
$result = 'Strike';
} elseif ($chance < 50) {
$result = 'Ball';
} elseif ($chance < 100) {
$result = 'Single';
} elseif ($chance < 150) {
$result = 'Double';
} elseif ($chance < 175) {
$result = 'Triple';
} elseif ($chance < 200) {
$result = 'Ground Rule Double';
} else {
$result = 'Home Run';
}
echo "$result<br>";