检查变量是否不等于多个字符串值的更简单方法?

当前代码:

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

对于您的第一个代码,您可以使用in_array()对@ShankarDamodaran给出的答案进行简短的更改:

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' ) {

...但更短。特别是如果你比较的不仅仅是“uk”和“in”。我没有使用额外的变量(Shankar$os使用),而是在if语句中定义数组。有些人可能会觉得很脏,我发现它快速而整洁:D

第二个代码的问题在于,它可以很容易地与TRUE交换,因为:

if (true) {

等于

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

您正在询问字符串的值是否不是 A 或不是 B。如果是A,它绝对不是B,如果是B,它绝对不是A。如果它是C或其他任何东西,它也不是A,也不是B。因此,该陈述总是(此处不考虑薛定谔定律)返回 true。


答案 2

你可以在 PHP 中使用 in_array()。

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

推荐