В основном, мне интересно, есть ли способ сократить что-то вроде этого:
if ($variable == "one" || $variable == "two" || $variable == "three")
таким образом, что переменная может быть проверена против или сопоставлена с несколькими значениями без повторения переменной и оператора каждый раз.
Например, что-то вроде этого может помочь:
if ($variable == "one" or "two" or "three")
или что-нибудь, что приводит к меньшему набору текста.
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
шаблона ( i nsensitive) может соответствовать как строчным, так и строчным буквам.