Есть ли ярлык для написания нескольких условий в php? - PullRequest
4 голосов
/ 19 января 2012

Есть ли более короткий способ написать это (без использования регулярных выражений или функций сравнения строк)?

if($page=='page1.php' || $page=='page2.php' || $page=='page3.php' || $page=='page4.php'){ do something...}

Я ищу что-то вроде:

if($page==('page1.php', 'page2.php', 'page3.php', 'page4.php')){do something...}

но я знаю, что это не правильно. Есть предложения?

Ответы [ 5 ]

14 голосов
/ 19 января 2012

Попробуйте in_array:

if (in_array($page, array('page1.php', 'page2.php', 'page3.php'))) { ... }

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

3 голосов
/ 19 января 2012

Использование switch, более читабельное, чем сложное if условие

switch ($page){
  case 'page1.php':
  case 'page2.php':
  case 'page3.php':
  case 'page4.php':
    // do something
    break;

  default:
    //else
}
1 голос
/ 19 января 2012

Чтобы получить ответ, который не такой же старый, как старый:

if (preg_match('"^page[1-4]\.php$"', $page)) {

Теперь это имеет смысл для вашего синтетического примера, и если у вас действительно есть диапазоны чего-либо для проверки или какой-то другой структуры, чтобы пройти. В основном это просто компактность.

0 голосов
/ 19 января 2012

UPDATE

Извините за мертвый ответ .. пропустил первую строку. как указано выше, вы можете создать массив страниц и пользователь in_array ()

$pagelist = array('page1.php','page2.php','page3.php','page4.php','page5.php')
if (in_array($page,$pagelist)) {
    //do something
}

это немного более элегантно и определенно очищает оператор if, но мало что делает для сокращения кода. Единственное преимущество, которое я могу себе представить, это то, что вы можете создать массив $ pagelist из внешнего источника, и его использование может быть более эффективным?

0 голосов
/ 19 января 2012

Я думаю, что одним из возможных решений является написание функции, которая в качестве аргументов принимает page1.php, page2.php и т. Д. И возвращает true, если утверждение верное.

...