Jak korzystać ze skrzynki rozdzielczej ”lub„ w PHP


230

Czy istnieje sposób użycia operatora „LUB” lub równoważnego w przełączniku PHP?

Na przykład coś takiego:

switch ($value) {

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

Odpowiedzi:


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

Nazywa się to „wypadaniem” bloku skrzynki. Termin istnieje w większości języków implementujących instrukcję switch.


135

Jeśli trzeba użyć ||z switchczym można spróbować:

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

Jeśli nie, preferowanym rozwiązaniem byłoby

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

Problem jest, że zarówno metoda nie jest skuteczna gdy ma do czynienia z dużymi przypadkach ... sobie wyobrazić, 1aby 100to będzie działać idealnie

$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

Nie będę ponownie publikować innych odpowiedzi, ponieważ wszystkie są poprawne, ale dodam tylko, że nie można użyć przełącznika do bardziej „skomplikowanych” instrukcji, np .: aby sprawdzić, czy wartość jest „większa niż 3”, od 4 do 6 "itd. Jeśli chcesz coś takiego zrobić, trzymaj się ifinstrukcji, lub jeśli jest to szczególnie potrzebne, możesz switchużyć tego od początku:

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

ale jak powiedziałem, osobiście ifużyłbym tam oświadczenia.


1
Cieszę się, że w tym przypadku zaleciłeś if () zamiast switch (). Ten rodzaj przełącznika tylko dodaje złożoności, IMO.
moo

1
tak, musisz mieć dość przekonujący powód, aby wybrać ten styl, ale dobrze wiedzieć, że jest to możliwe.
nickf

2
Cieszę się, że się tego nauczyłem. Za każdym razem, gdy buduję projekt w języku podstawowym, tęsknię za stylem C switch(), a kiedy pracuję w języku C, naprawdę brakuje mi tego Select Case, co jest naprawdę skrótowym sposobem powiedzenia „jest duży blok if, else if, else-if ... tutaj ".
Stan Rogers,

5
you can't use switch for more "complicated" statementsjest can'tczy jest shouldn't? ponieważ w twoim przykładzie tycan
Sharky

@Sharky miał na myśli, że zwykły przypadek użycia przełącznika nie może. tego rodzaju switch (true)rzecz nie jest zwykłym przypadkiem użycia przełącznika.
Chen Li Yong,

37

Spróbuj wykonać następujące przykłady w tym artykule: http://phpswitch.com/

Możliwe przypadki przełączników:

(ja). Prosta instrukcja zamiany

Instrukcja zamiany jest cudowna i magiczna. Jest to fragment języka, który pozwala wybierać między różnymi opcjami wartości i uruchamiać różne fragmenty kodu w zależności od ustawionej wartości.

Każda możliwa opcja jest podana przez przypadek w instrukcji switch.

Przykład:

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

(ii). Ograniczanie bloków kodu

Głównym zastrzeżeniem przełącznika jest to, że każda skrzynka przechodzi do następnej, chyba że zatrzymasz ją przerwaniem. Jeśli powyższy prosty przypadek zostanie rozszerzony na przypadek 5:

Przykład:

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). Używanie przewrotności w wielu przypadkach

Ponieważ przełącznik będzie działał, dopóki nie znajdzie przerwy, łatwo jest przyjąć koncepcję przewrotu i uruchomić ten sam kod dla więcej niż jednego przypadku:

Przykład:

przypadek 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). Zaawansowane przełączanie: przypadki warunkowe

Przełącznik PHP nie tylko pozwala na włączenie wartości konkretnej zmiennej: możesz użyć dowolnego wyrażenia jako jednego z przypadków, pod warunkiem, że daje on wartość do użycia przez przypadek. Oto przykład prostego walidatora napisanego przy użyciu przełącznika:

Przykład:

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

myślę, że może to pomóc w rozwiązaniu problemu.


Czy masz przypadek użycia w świecie rzeczywistym dla przykładu (iv)?
Pedro Moreira,

15

Próbować

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

9

Proponuję przejść przez http://php.net/manual/en/control-structures.switch.php (podręcznik)

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

wyjaśnienie

Podobnie jak w przypadku wartości, którą należy wykonać pojedynczą instrukcję, można ją wstawić bez przerwy, tak jak do momentu znalezienia przerwy, chyba że zostanie znaleziona przerwa, to będzie ona nadal wykonywać kod, a jeśli znaleziono przerwanie, wyjdzie ze skrzynki przełączników.


1

użyj tego kodu:

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

blok wymagał zarówno 1, jak i 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 Przykład

$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

Najlepszym sposobem może być skorzystanie z żądania. Ponadto może to być łatwiejsze i łatwiejsze w użyciu.

Przykład:

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

Zamiast korzystać z funkcji, które nie działają dobrze z PHP, szczególnie gdy masz PHP w HTML.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.