Сравнение нескольких значений в PHP

Я хотел бы перейти от этого:

if($var == 3 || $var == 4 || $var == 5 || $var =='string' || $var == '2010-05-16') { execute code here }

к этому:

if($var == (3, 4, 5, 'string', '2010-05-16')) {execute code here }

Кажется очень избыточным, чтобы набирать $ var, и я нахожу, что это делает его немного громоздким для чтения. Есть ли способ в PHP упростить его таким образом? Я прочитал здесь сообщение о том, что при использовании XQuery вы можете использовать оператор =, как в $ var = (1,2,3,4,5) и т. Д.

Спасибо, Джон

Поместите значения в массив, затем используйте функцию in_array (), чтобы проверить, существуют ли они.

 $checkVars = array(3, 4, 5, "string", "2010-05-16"); if(in_array($var, $checkVars)){ // Value is found. } 

http://uk.php.net/manual/en/function.in-array.php

Если вам нужно выполнить эту проверку очень часто, и вам нужна хорошая производительность, не используйте медленный поиск массива, но вместо этого используйте быстрый поиск хеш-таблицы:

 $vals = array( 1 => 1, 2 => 1, 'Hi' => 1, ); if (isset($vals[$val])) { // go! } 
 if (in_array($var, array(3, 4, 5, 'string', '2010-05-16'))) {execute code here } 

Или, альтернативно, блок переключателя:

 switch ($var) { case 3: case 4: case 5: case 'string': case '2010-05-16': execute code here; break; } 

Вы можете использовать in_array() .

 if (in_array($var, array(3,4,5,"string","2010-05-16"))) { .... } 

Или вы можете использовать in_array()

 if(in_array($var,array(4,5,'string','2010-05-16',true)) { } 

Просто чтобы дать альтернативное решение для использования in_array :

В некоторых случаях может быть быстрее установить массив, где значения являются ключами, а затем проверить с помощью isset()

Пример:

 $checkVars= [3 => true, 4 => true, 5 => true, "string" => true, "2010-05-16" => true]; if(isset($checkVars[$var]) { // code here } 

EDIT : Я провел некоторое тестирование, и похоже, что в большинстве случаев этот метод быстрее.

 $vals = array (3, 4, 5, 'string', '2010-05-16'); if(in_array($var, $vals)) { //execute code here } 

У меня была эта проблема, и я решил эту функцию:

 function orEquals(){ $args = func_get_args(); foreach($args as $arg){ if ($arg != $args[0]){ if($arg == $args[0]){ return true; break; } } } unset($args); } эта function orEquals(){ $args = func_get_args(); foreach($args as $arg){ if ($arg != $args[0]){ if($arg == $args[0]){ return true; break; } } } unset($args); } не function orEquals(){ $args = func_get_args(); foreach($args as $arg){ if ($arg != $args[0]){ if($arg == $args[0]){ return true; break; } } } unset($args); } 

то вы можете просто вызвать функцию следующим образом:

 if(orEquals($var, 3, 4, 5, 'string', '2010-05-16')){ //your code here }