在switch语句中使用conditional

时间:2013-06-18 21:06:15

标签: php switch-statement

我有一个相当简单的问题,但它尚未通过其他问题解决,并希望就此寻求答案。

假设我有一个变量整数,并且如果该值大于一个值且小于另一个值,则希望执行不同的操作。我对此切换的目标基本上是根据$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,但我想尽可能避免这种情况。 任何输入都非常感谢

5 个答案:

答案 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>";