1

假设我有一个变量整数,并且如果该值大于一个值且小于另一个值,则希望做不同的事情。我对这个开关的目标,基本上是根据 的值发送不同的结果$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,但如果可能的话,我想避免这种情况。

4

5 回答 5

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>";
于 2013-06-18T21:09:14.870 回答
0

To do what you are wanting to do, you should use an if-else. The value used for the case expression must be an integer, floating-point decimal, or string.

于 2013-06-18T21:11:43.353 回答
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";
}
?>
于 2013-06-18T21:10:31.763 回答
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>";
于 2021-01-16T07:36:56.290 回答
0

你只需要在你身上设置trueswitch。使用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;
}
于 2018-11-12T13:22:35.467 回答