более простой способ кодирования в php "if ($ x == $ a [1] || $ x == $ a [2] || $ x == $ a [3] ....) - PullRequest
4 голосов
/ 26 апреля 2011

Как гласит заголовок, что проще сделать

if ( $somevariable == $somearray[1] || $somevariable  == $somearray[3] || $somevariable  == $somearray[10] ) 

Похоже, даже с 3 переменными .. будет ярлык.

Я знаю, что это не работает, но что-то вроде было бы неплохо:

if ($somevariable == $somearray[1],$somearray[3],$somearray[10]) {

Ответы [ 4 ]

9 голосов
/ 26 апреля 2011

Один вариант

if ( in_array( $somevariable, array( $somearray[1], $somearray[3], $somearray[10] ) ) {}
3 голосов
/ 26 апреля 2011

Вы можете использовать in_array .

2 голосов
/ 26 апреля 2011

На самом деле ваш код уже в порядке.
Если вы не хотите погружаться в глубины рефакторинга , просто оставьте все как есть. Потому что:

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

Стремясь к краткости, не стоит забывать удобочитаемость .
Единственное приемлемое решение - это то, которое не менее читаемо, чем ваше текущее. Который читает (буквально: если вы читаете это вслух), как это было задумано.
Пример: сделав такую ​​функцию,

function whateverCondition($variable,$array) {
  return ( $variable == $array[1] 
        || $variable  == $array[3] 
        || $variable  == $array[10]); 
}

вы можете позвонить позже,

if (whateverCondition($somevariable,$somearray))

сохраняя и краткость и удобочитаемость (если вы правильно его называете).

Как уже упоминалось в комментариях, параметры кажутся немного избыточными. это зависит. если это будет функция, держите их на месте.
если эта функция будет методом некоторого соответствующего класса - вы можете опустить их, сделав ее

if ($user->meetCondition())
1 голос
/ 26 апреля 2011

Другой вариант с использованием array_intersect_key():

if (in_array($var, array_intersect_key($somearray, array_flip(array(1, 3, 10)))))
{
}

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


В функции с переменными числами, как предложил @knittl:

function in_array_keys($needle, $haystack)
{
    $keys = array_flip(array_slice(func_get_args(), 2);
    return in_array($needle, array_intersect_key($haystack, $keys)));
}

var_dump(in_array_keys($var, $somearray, 1, 2, 3));
...