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

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

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

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

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

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

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


person vertigoelectric    schedule 02.05.2013    source источник
comment
Я понял это после того, как написал. Спасибо за подсказку, конечно!   -  person vertigoelectric    schedule 02.05.2013


Ответы (4)


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

if (in_array($variable, array('one','two','three'))) {
person John Conde    schedule 02.05.2013
comment
всегда слишком быстро для меня Джон Конде :P - person brbcoding; 02.05.2013
comment
Я понял это после того, как опубликовал свой вопрос. Думаю, я поторопился. Это довольно блестящее решение, особенно полезное при сравнении нескольких вещей одновременно. Спасибо. Я приму это, как только сайт позволит мне. Он говорит, что я должен ждать. - person vertigoelectric; 02.05.2013
comment
@brbcoding, я все еще ценю твои усилия. - person vertigoelectric; 02.05.2013
comment
короче: if (in_array($variable, ['one','two','three'])) { - person Code4R7; 20.03.2018
comment
как бы вы справились с этим в ситуации AND &&? - person W.Doch; 29.03.2018

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

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

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

if (stristr('one/two/three', $variable))//or comma's or somehting else
person Elias Van Ootegem    schedule 02.05.2013
comment
Я думаю, что у вас опечатка, и вы хотели сказать два вместо того, но, очевидно, я знаю, что вы имели в виду. В любом случае, это еще одна приятная тактика, и на самом деле она еще короче. Я заметил, что вы использовали strstr в первый раз и stristr во второй раз. В чем разница? - person vertigoelectric; 02.05.2013
comment
strstr ищет точное соответствие строки (CaseSensitive) stristr с i выполняет сравнение без учета регистра. это единственная разница. И да, тот бред был опечаткой :P - person Elias Van Ootegem; 02.05.2013
comment
Ах хорошо. Вот я и подумал, что разница. Также "thwothr" все еще опечатка XD - person vertigoelectric; 03.05.2013
comment
@vertigoelectric: ох уж... сегодня я просто не могу собраться ;) - person Elias Van Ootegem; 03.05.2013
comment
К сожалению, этого недостаточно: это все равно подтвердит значение, такое как ree или wo. Вам нужно будет использовать "/{$variable}/" вместо $variable. Хотя решение in_array, вероятно, медленнее, оно начинает казаться чище. - person LSerni; 03.04.2016
comment
@LSerni: в этом случае потребуется строка типа «/one/two/three/», поэтому первая и последняя строки также подходят. - person jimasun; 06.12.2016

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

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

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

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

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

person kenorb    schedule 02.09.2016