Более простой способ проверить, не равна ли переменная нескольким строковым значениям?

Текущие Коды:

<?php

  // See the AND operator; How do I simplify/shorten this line?
  if( $some_variable !== 'uk' && $some_variable !== 'in' ) {

    // Do something

  }

?>

и:

<?php

  // See the OR operator; How do I simplify/shorten this line?
  if( $some_variable !== 'uk' || $some_variable !== 'in' ) {

    // Do something else

  }

?>

есть ли более простой (т. е. более короткий) способ написать два условия?

Примечание: Да, они разные,и я ожидаю, что разные способы сократить коды.

5 ответов


для вашего первого кода Вы можете использовать короткое изменение ответ @ShankarDamodaran используя in_array():

if ( !in_array($some_variable, array('uk','in'), true ) ) {

- это то же, что:

if ( $some_variable !== 'uk' && $some_variable !== 'in' ) {

... но короче. Особенно, если вы сравниваете больше, чем просто " uk " и "in". Я не использую дополнительную переменную (Шанкар использовал $os) но вместо этого определите массив в операторе if. Кому-то это покажется грязным, а мне-быстрым и аккуратным. : D

проблема с ваш код, что он легко может быть заменен только так:

if (true) {

равна

if ( $some_variable !== 'uk' || $some_variable !== 'in' ) {

вы спрашиваете, является ли значение строки Не A или не B. Если это A, это определенно не Также B, и если это B, это определенно не A. И если это C или буквально что-нибудь еще, это также не A и не B. Так что утверждение всегда (не принимая во внимание закон schrödingers здесь) возвращает true.


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

$os = array("uk", "us"); // You can set multiple check conditions here
if (in_array("uk", $os)) //Founds a match !
{
    echo "Got you"; 
}

Если вы планируете создать функцию в операторе if, я бы также посоветовал использовать in_array. Там намного чище.

Если вы пытаетесь присвоить значения переменным, вы можете использовать стенографию if/else:

$variable_to_fill = $some_variable !== 'uk' ? false : true;

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

<?php
    $illstack=array(...............);
    $val=array('uk','bn','in');
    if(count(array_intersect($illstack,$val))===count($val)){ // all of $val is in $illstack}
?>

некоторые основные регулярные выражения сделают трюк хорошо для $some_variable !== 'uk' && $some_variable !== 'in':

if(!preg_match('/^uk|in$/', $some_variable)) {
    // Do something
}