Простой способ проверить, не является ли переменная не равной нескольким строковым значениям?
Текущие коды:
<?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
}
?>
Существует ли более простой (т.е. более короткий) способ записать два условия?
ПРИМЕЧАНИЕ: Да, они разные, и я ожидаю различные способы сокращения кодов.
Ответы
Ответ 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
}