2013-05-02 16 views
15

Zasadniczo co Zastanawiam się, czy istnieje sposób, aby skrócić coś takiego:W PHP istnieje krótki sposób porównania zmiennej z wieloma wartościami?

if ($variable == "one" || $variable == "two" || $variable == "three") 

w taki sposób, że zmienna może być testowany przed lub w porównaniu z wieloma wartościami bez powtarzania zmiennej i operator za każdym razem .

Na przykład coś wzdłuż linii to może pomóc:

if ($variable == "one" or "two" or "three") 

ani niczego, co przekłada się na mniejszą pisania.

+0

Uświadomiłem sobie, że po tym, jak napisałem. Dzięki za napiwek, oczywiście! – vertigoelectric

Odpowiedz

29

in_array() to co używam

if (in_array($variable, array('one','two','three'))) { 
+2

zawsze zbyt szybko dla mnie John Conde: P – brbcoding

+2

Zrozumiałem to po tym, jak napisałem moje pytanie. Zgaduję, że skoczyłem z pistoletu. Jest to raczej genialne rozwiązanie i szczególnie pomocne w porównaniu do kilku rzeczy naraz. Dziękuję Ci. Przyjmuję to, gdy witryna mi pozwoli. Mówi, że muszę poczekać. – vertigoelectric

+1

@brbcoding, nadal doceniam twoje wysiłki. – vertigoelectric

0
$variable = 'one'; 
// ofc you could put the whole list in the in_array() 
$list = ['one','two','three']; 
if(in_array($variable,$list)){  
    echo "yep";  
} else { 
    echo "nope";   
} 
4

bez konieczności konstruowania tablicy:

if (strstr('onetwothree', $variable)) 
//or case-insensitive => stristr 

Oczywiście, technicznie, to zwróci true jeśli zmienna jest twothr, więc dodanie "ograniczniki" mogą być przydatne:

if (stristr('one/two/three', $variable))//or comma's or somehting else 
+0

Myślę, że masz literówkę i chciałeś powiedzieć "twothr" zamiast "thothr", ale oczywiście wiem, co miałeś na myśli. W każdym razie jest to kolejna dobra taktyka, a nawet jeszcze krótsza. Zauważyłem, że po raz pierwszy użyłeś 'strstr' po raz pierwszy i' stristr' po raz drugi. Jaka jest różnica? – vertigoelectric

+0

'strstr' szuka dopasowanego ciągu _exact_ (CaseSensitive)' stristr' z 'i' porównuje case-insensiteve. to jedyna różnica. I tak, ta tandeta była literówka: P –

+0

Ah, okay. To właśnie myślałem, że różnica jest. Również "thwothr" nadal jest literówką XD – vertigoelectric

0

W przypadku przełącznika

switch($variable){ 
case 'one': case 'two': case 'three': 
    //do something amazing here 
break; 
default: 
    //throw new Exception("You are not worth it"); 
break; 
} 
0

Stosując preg_grep może być krótsze i bardziej elastyczny niż przy in_array:

if (preg_grep("/(one|two|three)/i", array($variable))) { 
    // ... 
} 

Ponieważ opcjonalnie ipattern modifier (i nsensitive) można dopasować zarówno górną i dolną obudowę listy.

Powiązane problemy