Come usare una custodia "o" in PHP


230

Esiste un modo per utilizzare un operatore "OR" o equivalente in uno switch PHP?

Ad esempio, qualcosa del genere:

switch ($value) {

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

Risposte:


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

Questo si chiama "cadere" nel case case. Il termine esiste nella maggior parte delle lingue che implementano un'istruzione switch.


135

Se devi usare ||con switchallora puoi provare:

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

Altrimenti la tua soluzione preferita sarebbe stata

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

Il problema è che sia il metodo non è efficiente quando si tratta di grandi casi ... immaginare 1per 100questo dovrebbe funzionare perfettamente

$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

Non ripubblicherò le altre risposte perché sono tutte corrette, ma aggiungerò semplicemente che non è possibile utilizzare switch per istruzioni più "complicate", ad esempio: per verificare se un valore è "maggiore di 3", " tra 4 e 6 ", ecc. Se hai bisogno di fare una cosa del genere, segui le ifistruzioni o se ce n'è una necessità particolarmente forte switch, è possibile utilizzarlo da capo a piedi:

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

ma come ho detto, avrei usato personalmente una ifdichiarazione lì.


1
Sono contento di vedere che hai raccomandato if () su switch () in questo caso. Questo tipo di switch aggiunge solo complessità, IMO.
moo,

1
sì, dovresti avere un motivo abbastanza convincente per scegliere questo stile, ma è bello sapere che è possibile.
Nickf,

2
Sono davvero contento di averlo imparato. Ogni volta che costruisco un progetto in un linguaggio Basic-y, mi manca avere uno stile C switch(), e quando lavoro in un linguaggio C-ish mi manca davvero avere Select Case, che è davvero un modo abbreviato per dire "c'è un grande blocco di if, else if, else-if ... here ".
Stan Rogers,

5
you can't use switch for more "complicated" statementsè can'to è shouldn't? perché nel tuo esempio tucan
Sharky

@Sharky intendeva dire che il caso d'uso normale di switch non può. questo genere di switch (true)cose non è un normale caso d'uso di switch.
Chen Li Yong

37

Prova con i seguenti esempi in questo articolo: http://phpswitch.com/

Casi di commutazione possibili:

(io). Una semplice istruzione switch

L'istruzione switch è meravigliosa e magica. È una parte della lingua che consente di selezionare tra diverse opzioni per un valore ed eseguire diverse parti di codice a seconda del valore impostato.

Ogni possibile opzione è data da un caso nell'istruzione switch.

Esempio :

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

(ii). Delimitazione di blocchi di codice

Il principale avvertimento dell'interruttore è che ciascun caso passerà al successivo, a meno che non lo si fermi con una pausa. Se il semplice caso precedente è esteso al caso 5:

Esempio :

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). Utilizzo di fallthrough per più casi

Poiché switch continuerà a eseguire il codice fino a quando non trova un'interruzione, è abbastanza facile prendere il concetto di fallthrough ed eseguire lo stesso codice per più di un caso:

Esempio :

caso 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). Commutazione avanzata: casi di condizione

L'opzione PHP non ti consente solo di attivare il valore di una particolare variabile: puoi usare qualsiasi espressione come uno dei casi, purché fornisca un valore da utilizzare per il caso. Ad esempio, ecco un semplice validatore scritto usando switch:

Esempio :

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

penso che questo possa aiutarti a risolvere il tuo problema.


Hai qualche caso d'uso reale per l'esempio (iv)?
Pedro Moreira,

15

Provare

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

9

Ti suggerisco di consultare http://php.net/manual/en/control-structures.switch.php (manuale)

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

spiegazione

Come per il valore che si desidera eseguire una singola istruzione, è possibile inserirlo senza interruzione poiché fino a quando non viene rilevata l'interruzione continuerà l'esecuzione del codice e se l'interruzione viene rilevata uscirà dalla custodia.


1

usa questo codice:

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

il blocco richiedeva sia 1 che 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 Esempio

$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

Il modo migliore potrebbe essere se altro con la richiesta. Inoltre, questo può essere più semplice e chiaro da usare.

Esempio:

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

Invece di usare le funzioni che non funzioneranno bene con PHP, specialmente quando hai PHP in HTML.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.