В PHP есть ли короткий способ сравнить переменную с несколькими значениями?

в основном, что мне интересно, есть ли способ сократить что-то вроде этого:

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

таким образом, что переменную можно протестировать или сравнить с несколькими значениями, не повторяя переменную и оператор каждый раз.

например, что-то вроде этого может помочь:

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

или что-нибудь, что приводит к меньшему набору текста.

5 ответов


in_array() это то, что я использую

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

без необходимости построения массива:

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

конечно, технически это вернет true, если переменная twothr, поэтому добавление "разделителей" может быть удобно:

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

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

корпус переключателя

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

используя preg_grep может быть короче и более гибким, чем при использовании in_array:

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

потому что необязательный элемент i модификатор шаблона (Яnsensitive) может соответствовать как верхним, так и нижним буквам.