Подтвердить что ты не робот

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

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

<?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

  }

?>

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

ПРИМЕЧАНИЕ: Да, они разные, и я ожидаю различные способы сокращения кодов.

4b9b3361

Ответ 1

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

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

или даже короче с доступной нотацией [] начиная с php 5.4, как указано @Forty в комментариях

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

такой же как:

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

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

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

if (true) {

равняется

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

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

Ответ 2

Вы можете использовать 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"; 
}

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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