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

Switch ステートメントの構文:

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-else を使用する必要があります。ケース式に使用される値は、整数、浮動小数点 10 進数、または文字列でなければなりません。

于 2013-06-18T21:11:43.353 に答える
0

コードにいくつかの数学/比較の問題がありますが、特定の結果に対応する数値範囲を設定するつもりのようです。また、1 回のスクリプト実行で複数の結果に到達することも不適切と思われます。

これらの真実を考えると、if-elseif-elseブロックを使用する必要があります。switchこれは、ブロックよりも適切で冗長ではありません。

switch ブロックを使用する唯一の利点は、1 つの評価を行い、その評価に基づいて異なるアクションを実行する必要がある場合です。複数の評価を行っているため、スイッチを使用する利点はありません。実際、計算の複雑さは同じであり、構文は if ブロックと同じかそれ以上の長さになります。私は個人的にスイッチ ブロックが嫌いなので、代わりに他の実行可能な手法を使用するように努めています。スイッチ ブロックは、私のプロのプロジェクトでは非常にまれにしか登場しません。

ASC または DESC 方式で進行することにより、各条件で必要な式は 1 つだけになります。各条件で一貫した演算子を使用すると、スクリプトの保守/拡張が容易になります。

最後に、PHP では、elseif2 語ではなく 1 語です。

コード:

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 に答える