2010-10-19 12 views
1

Possible en double:
PHP make if shorter

J'ai une déclaration if qui ressemble à ceci:

if($variable == "one" || $variable == "two" || $variable == "three" || $variable == "four"){ 
    // do something 
} 
else { 
    // do something else 
} 

le problème est que ça devient assez lourd .. sa va être environ 20 ou 30 options différentes.

Y at-il de toute façon que je peux le faire en moins de code? EG:

if($variable == ("one" || "two" || "three" || "four" || "five"))..

Répondre

5
switch ($variable) { 
case "one": 
case "two": 
case "three": 
case "four": 
    // do something 
    break; 
default: 
    // do something else 
} 

OU

$testSeries = array("one","two","three","four"); 
if (in_array($variable,$testSeries)) { 
    // do something 
} 
else { 
    // do something else 
} 
+0

ah, est-ce que la première option fonctionne! : p n'a pas essayé ça. J'ai pensé utiliser une instruction switch mais je n'ai pas voulu répliquer le code pour chaque 'case'. :) Je vous remercie. –

+1

@Thomas: L'instruction switch de Mark fonctionne parce que les instructions 'break' sont omises de tout sauf le dernier cas, donc le code irait jusqu'au dernier cas et exécuterait son code aussi, jusqu'à ce qu'il rencontre finalement le' break' déclaration ci-dessous. – BoltClock

+0

ah je vois ... c'était génial :) –

4

La chose la plus simple qui vient à l'esprit est que vous créez un tableau comme celui-ci:

$options = array("one" , "two" , "three" , "four" , "five"); 
if(in_array($variable , $options)){ 

}else{ 

} 
0
switch ($i) { 
case "one": 
case "two": 
case "three": 
. 
. 
. 
//Code here 
break; 
} 
0
if (preg_match('/^(one|two|three|four|five)$/', $var)) { 
    // Do stuff 
}