PHPでスイッチケース「または」を使用する方法


230

PHPスイッチで「OR」演算子または同等のものを使用する方法はありますか?

たとえば、次のようなもの:

switch ($value) {

    case 1 || 2:
        echo 'the value is either 1 or 2';
        break;
}

回答:


505
switch ($value)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

これは、ケースブロックの「フォールスルー」と呼ばれます。この用語は、switchステートメントを実装するほとんどの言語に存在します。


135

で使用する必要がある場合||switch、次のことを試すことができます。

$v = 1;
switch (true) {
    case ($v == 1 || $v == 2):
        echo 'the value is either 1 or 2';
        break;
}

そうでなければ、あなたの好ましい解決策は

switch($v) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}

問題は、大きなケースを処理するときに両方の方法が効率的ではないことです... これが完全に機能する1と想像し100てください

$r1 = range(1, 100);
$r2 = range(100, 200);
$v = 76;
switch (true) {
    case in_array($v, $r1) :
        echo 'the value is in range 1 to 100';
        break;
    case in_array($v, $r2) :
        echo 'the value is in range 100 to 200';
        break;
}

58

他の回答はすべて正しいので再投稿しませんが、「複雑な」ステートメントにスイッチを使用できないことを追加します。例:値が「3より大きい」かどうかをテストするには、「 4〜6インチなど。そのようなことをする必要がある場合は、ifステートメントを使用するか、または特に強いニーズがある場合はswitch、前後に使用することができます。

switch (true) {
    case ($value > 3) :
        // value is greater than 3
    break;
    case ($value >= 4 && $value <= 6) :
        // value is between 4 and 6
    break;
}

私が言ったように、私は個人的にifそこで声明を使います。


1
この場合、switch()よりもif()をお勧めします。この種のスイッチは、IMOに複雑さを追加するだけです。
moo

1
そうです、このスタイルを選択するにはかなり説得力のある理由が必要ですが、それが可能であることを知っておくのは良いことです。
nickf 2008年

2
私は実際にこれを学んだことを嬉しく思います。Basic-y言語でプロジェクトをビルドするたびに、Cスタイルが欠けてしまいます。Cっぽい言語でswitch()作業しているときは、本当に欠けていますSelect Case。これは、「大きなif、else if、else-if ...のブロック」。
スタンロジャース

5
you can't use switch for more "complicated" statementsそれがあるcan'tか、それがありますかshouldn't?あなたの例ではあなたcan
Sharky

@Sharkyは、スイッチの通常の使用例ではできないことを意味していました。この種のswitch (true)ものは、スイッチの通常の使用例ではありません。
Chen Li Yong

37

この記事の次の例を試してください:http : //phpswitch.com/

可能なスイッチケース:

(私)。簡単なswitchステートメント

switchステートメントは不思議で魔法です。これは、値のさまざまなオプションを選択し、設定されている値に応じてさまざまなコードを実行できる言語の一部です。

可能な各オプションは、switchステートメントのcaseで指定されます。

例:

switch($bar)
{
    case 4:
        echo "This is not the number you're looking for.\n";
        $foo = 92;
}

(ii)。コードブロックの区切り

スイッチの主な注意点は、breakで停止しない限り、各ケースが次のケースで実行されることです。上記の単純なケースがケース5をカバーするように拡張された場合:

例:

case 4:
    echo "This is not the number you're looking for.\n";
    $foo = 92;
    break;

case 5:
    echo "A copy of Ringworld is on its way to you!\n";
    $foo = 34;
    break;

(iii)。複数のケースでフォールスルーを使用する

スイッチはブレークを見つけるまでコードを実行し続けるので、フォールスルーの概念を取り入れて、複数のケースで同じコードを実行するのは簡単です。

例:

ケース2:

case 3:
case 4:
    echo "This is not the number you're looking for.\n";
    $foo = 92;
    break;

case 5:
    echo "A copy of Ringworld is on its way to you!\n";
    $foo = 34;
    break;

(iv)。高度な切り替え:条件ケース

PHPのスイッチでは、特定の変数の値をオンにするだけではありません。使用するケースの値が指定されている限り、任意の式をケースの1つとして使用できます。例として、スイッチを使用して記述された簡単なバリデータは次のとおりです。

例:

switch(true)
{
    case (strlen($foo) > 30):
        $error = "The value provided is too long.";
    $valid = false;
    break;

    case (!preg_match('/^[A-Z0-9]+$/i', $foo)):
        $error = "The value must be alphanumeric.";
    $valid = false;
    break;

    default:
    $valid = true;
    break;
}

これは問題の解決に役立つと思います。


例(iv)の実際のユースケースはありますか?
ペドロモレイラ

15

試す

switch($value) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}

9

http://php.net/manual/en/control-structures.switch.php(manual)を使用することをお勧めします

switch ($your_variable)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

説明

単一のステートメントを実行する値のように、breakが見つかるまで、またはそれが見つからない限り、breakなしでコードを実行できます。breakが見つかると、switchケースから出力されます。


1

このコードを使用してください:

switch($a) {
case 1:
case 2:
    .......
    .......
    .......
    break;
}

ブロックは1と2の両方を要求しました。




-4

最善の方法は、他にリクエストがある場合です。また、これはより簡単で明確に使用できます。

例:

<?php 
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information'){?>
<div>
echo "hello";
}?>

特にHTMLにPHPがある場合、PHPでうまく機能しない関数を使用する代わりに。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.