2013-10-08 5 views
8

Ho un interruttore in cui in occasioni molto rare potrei aver bisogno di passare a un altro caso, Cerco qualcosa di simile a questi:PHP: è possibile passare da un caso all'altro all'interno di uno switch?

switch($var){ 
case: 'a' 
    if($otherVar != 0){ // Any conditional, it is irrelevant 
    //Go to case y; 
    }else{ 
    //case a 
    } 
break; 
    case 'b': 
    //case b code 
    break; 
    case 'c': 
    if($otherVar2 != 0){ // Any conditional, it is irrelevant 
     //Go to case y; 
    }else{ 
     //case c 
    } 
    break; 
    . 
    . 
    . 
    case 'x': 
    //case x code 
    break; 
    case 'y': 
    //case y code 
    break; 

    default: 
    // more code 
    break; 
} 

C'è qualche opzione GOTO, I rosso da qualche parte su di esso, ma non posso trovarlo, o forse un'altra soluzione? Grazie.

+3

Se è necessario utilizzare un GOTO che probabilmente non avete qualcosa diritto strutturato – Casey

risposta

15

È necessario PHP 5.3 o superiore, ma qui:

Ecco la goto funzionalità da http://php.net/manual/en/control-structures.goto.php

<?php 

$var = 'x'; 
$otherVar = 1; 

switch($var){ 
    case 'x': 
     if($otherVar != 0){ // Any conditional, it is irrelevant 
     goto y; 
     }else{ 
     //case X 
     } 
    break; 

    case 'y': 
     y: 
     echo 'reached Y'; 
     break; 

    default: 
     // more code 
     break; 
} 

?> 
+0

Grazie mille! PHP 5.3 L'ho perso, dovrò controllare la mia versione. Grazie ancora – multimediaxp

+0

Sei il benvenuto. Come altri hanno sottolineato, questo non è il modo ideale per usare PHP, ma la funzionalità è ovviamente lì per un motivo. –

1

Invece di usare qualsiasi trucchi di swtich-caso, una logica di migliore potrebbe essere la seguente.

function func_y() { 
    ... 
    } 

    switch($var){ 
    case: 'x' 
     if($otherVar != 0){ // Any conditional, it is irrelevant 
     func_y(); 
     }else{ 
     //case X 
     } 
    break; 

     case 'y': 
     func_y(); 
     break; 

     default: 
     // more code 
     break; 
    } 
5

Che ne dite di un collegamento a cascata (o meno) in base alle condizioni supplementari?

case 'x' : 
    if ($otherVar == 0) { 
     break; 
    } 
case 'y' : 
+0

Che è una buona opzione, ma se il caso sto cercando non è il prossimo, ma n dopo, avrei bisogno di aggiungere che alla condizione che ogni singolo caso. – multimediaxp

+0

@EddyXP non hai illustrato questo requisito nella tua domanda. Inoltre, non puoi riordinare i casi? – Phil

+0

Certo Phil, credo che avevo bisogno di dare più casi, ho aggiunto più casi per illustrare meglio, grazie mille. – multimediaxp

Problemi correlati