Сравнение нескольких значений в 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)
etc.
8 ответов
поместите значения в массив, затем используйте функцию in_array (), чтобы проверить, существуют ли они.
$checkVars = array(3, 4, 5, "string", "2010-05-16");
if(in_array($var, $checkVars)){
// Value is found.
}
Если вам нужно выполнять эту проверку очень часто, и вам нужна хорошая производительность, не используйте медленный поиск массива, а вместо этого используйте быстрый поиск хэш-таблицы:
$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
:
в некоторых случаях может быть быстрее установить массив, где значения являются ключами, а затем проверить с помощью isset()
пример:
$checkVars= [3 => true,
4 => true,
5 => true,
"string" => true,
"2010-05-16" => true];
if(isset($checkVars[$var])
{
// 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);
}
тогда вы можете просто вызвать функцию следующим образом:
if(orEquals($var, 3, 4, 5, 'string', '2010-05-16')){
//your code here
}