Verwendung eines Switch Case 'oder' in PHP


230

Gibt es eine Möglichkeit, einen ODER-Operator oder einen gleichwertigen Operator in einem PHP-Switch zu verwenden?

Zum Beispiel so etwas:

switch ($value) {

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

Antworten:


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

Dies wird als "Durchfallen" des Fallblocks bezeichnet. Der Begriff existiert in den meisten Sprachen, die eine switch-Anweisung implementieren.


135

Wenn Sie verwenden müssen , ||mit switchversuchen Sie können dann:

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

Wenn nicht, wäre Ihre bevorzugte Lösung gewesen

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

Das Problem ist, dass beide Methoden bei großen Fällen nicht effizient sind. Stellen Sie sich vor 1, 100dies würde perfekt funktionieren

$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

Ich werde die anderen Antworten nicht erneut veröffentlichen, da sie alle korrekt sind, aber ich möchte nur hinzufügen, dass Sie switch nicht für "kompliziertere" Anweisungen verwenden können, z. B.: Um zu testen, ob ein Wert "größer als 3" ist. " zwischen 4 und 6 "usw. Wenn Sie so etwas tun müssen, bleiben Sie bei der Verwendung von ifAnweisungen, oder wenn ein besonders starker Bedarf besteht, können switchSie diese von hinten nach vorne verwenden:

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

aber wie gesagt, ich würde dort persönlich eine ifAussage verwenden.


1
Schön zu sehen, dass Sie in diesem Fall if () over switch () empfohlen haben. Diese Art von Schalter erhöht nur die Komplexität, IMO.
Moo

1
Ja, Sie müssten einen ziemlich überzeugenden Grund haben, diesen Stil zu wählen, aber es ist gut zu wissen, dass es möglich ist.
Nickf

2
Ich bin eigentlich froh, das gelernt zu haben. Jedes Mal, wenn ich ein Projekt in einer Basic-y-Sprache erstelle, vermisse ich einen C-Stil switch(), und wenn ich in einer C-ischen Sprache arbeite, vermisse ich es wirklich Select Case, was eine Abkürzung für "es gibt eine große" ist Block von wenn, sonst wenn, sonst-wenn ... hier ".
Stan Rogers

5
you can't use switch for more "complicated" statementsist es can'toder ist es shouldn't? weil in Ihrem Beispiel Siecan
Sharky

@ Sharky meinte er, dass der gewöhnliche Anwendungsfall von Switch nicht kann. Diese Art von switch (true)Dingen ist kein gewöhnlicher Anwendungsfall für Switches.
Chen Li Yong

37

Versuchen Sie es mit den folgenden Beispielen in diesem Artikel: http://phpswitch.com/

Mögliche Schalterfälle:

(ich). Eine einfache switch-Anweisung

Die switch-Anweisung ist wunderbar und magisch. Es ist ein Teil der Sprache, mit dem Sie zwischen verschiedenen Optionen für einen Wert wählen und je nach festgelegtem Wert verschiedene Codeteile ausführen können.

Jede mögliche Option wird durch einen Fall in der switch-Anweisung angegeben.

Beispiel:

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

(ii). Codeblöcke abgrenzen

Die größte Einschränkung des Schalters ist, dass jeder Fall in den nächsten übergeht, es sei denn, Sie stoppen ihn mit einer Pause. Wenn der obige einfache Fall auf Fall 5 ausgedehnt wird:

Beispiel:

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). Verwenden von Fallthrough für mehrere Fälle

Da der Switch den Code so lange ausführt, bis eine Unterbrechung festgestellt wird, ist es einfach genug, das Konzept des Fallthroughs zu verwenden und denselben Code für mehr als einen Fall auszuführen:

Beispiel:

Fall 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). Erweiterte Umschaltung: Zustandsfälle

Mit dem Schalter von PHP können Sie nicht nur den Wert einer bestimmten Variablen einschalten: Sie können einen beliebigen Ausdruck als einen der Fälle verwenden, sofern er einen Wert für den zu verwendenden Fall angibt. Als Beispiel ist hier ein einfacher Validator, der mit switch geschrieben wurde:

Beispiel:

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;
}

Ich denke, dies kann Ihnen helfen, Ihr Problem zu lösen.


Haben Sie einen realen Anwendungsfall für das Beispiel (iv)?
Pedro Moreira

15

Versuchen

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

9

Ich empfehle Ihnen, http://php.net/manual/en/control-structures.switch.php (Handbuch) durchzugehen.

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

Erläuterung

Wie für den Wert, den Sie für die Ausführung einer einzelnen Anweisung verwenden, können Sie ihn ohne Unterbrechung einfügen, bis oder solange keine Unterbrechung gefunden wird, wird der Code weiter ausgeführt, und wenn eine Unterbrechung gefunden wird, wird er aus dem Schalterfall entfernt.


1

Verwenden Sie diesen Code:

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

Der Block forderte sowohl 1 als auch 2.


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

0

http://php.net/manual/en/control-structures.switch.php Beispiel

$today = date("D");

    switch($today){

        case "Mon":

        case "Tue":

            echo "Today is Tuesday or Monday. Buy some food.";

            break;

        case "Wed":

            echo "Today is Wednesday. Visit a doctor.";

            break;

        case "Thu":

            echo "Today is Thursday. Repair your car.";

            break;

        default:

            echo "No information available for that day.";

            break;

    }

-4

Der beste Weg könnte sein, wenn sonst mit Anfrage. Dies kann auch einfacher und klarer zu bedienen sein.

Beispiel:

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

Anstatt die Funktionen zu verwenden, die mit PHP nicht gut funktionieren, insbesondere wenn Sie PHP in HTML haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.