Задать вопрос
werber
@werber
Системный администратор Windows

Как в PHP сделать правильнее выполнение условия при множестве схожих условий?

Допустим, у меня есть переменная $a, и она может быть равна нескольким значениям, например "one", "two", "letter", "sun", "light" и т.д., просто значения из головы. Нужно сделать условие if, чтобы если $a равно одному из вышеперечисленных значений, то выполнять некий код. Писать кучу конструкций типа $a == "one" OR $a == "two" OR $a == "letter" не хочется. Думаю, как бы правильнее реализвать, чтобы не получился многотонный код. Значений таких может быть и под 20 штук, как бы. Многострочный код условий мне кажется уродливым. Думаю, что копать нужно в сторону заведения массива с этими значениями и далее проверять наличие $a внутри этого массива - я правильно думаю? Если да, думаю написать сюда как я вижу обработку массива.
  • Вопрос задан
  • 2179 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
$wordsArray = ['one','two','three'];
if(in_array($a,$wordsArray)){
  //code here
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@theg4sh
Да, использование массива это один из самых простых способов.
Но все же конструкция из if будет быстрее - в случае с массивам помимо выделения памяти под строки, будет также аллоцироваться память под сам массив, тоже с деаллокацией.
На одном условии это не заметно, только в масштабах крупного проекта сотни лишних операций выделения памяти от каждого клиента ни к чему.

Как альтернатива блокам из if - конструкция switch-case:
switch($a){
case "one":
case "two":
case "three":
  // your code
}


В случае использования поиска только простых строк можно воспользоваться трюком с strpos:
if (strpos(":"+$a+":", ":one:two:three:space ship:") !== FALSE) {
  // your code here
}

в данном случае будет запущен всего один цикл поиска подстроки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы