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

its*_*_me 53 php if-statement conditional-statements

现行代码:

<?php

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

    // Do something

  }

?>
Run Code Online (Sandbox Code Playgroud)

和:

<?php

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

    // Do something else

  }

?>
Run Code Online (Sandbox Code Playgroud)

是否有更简单(即更短)的方式来编写这两个条件?

注意:是的,它们是不同的,我期待缩短代码的不同方法.

And*_*erj 104

为了您的第一个代码,你可以用很短的改变由@ShankarDamodaran给出的答案使用in_array():

if ( !in_array($some_variable, array('uk','in'), true ) ) {
Run Code Online (Sandbox Code Playgroud)

是相同的:

if ( !in_array($some_variable, ['uk','in'], true ) ) {
Run Code Online (Sandbox Code Playgroud)

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

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

if ( $some_variable !== 'uk' && $some_variable !== 'in' ) {
Run Code Online (Sandbox Code Playgroud)

等于

if (true) {
Run Code Online (Sandbox Code Playgroud)

你问的是字符串的值是不是A还是不是B.如果它是A,它肯定不是B,如果它是B,它绝对不是A.如果它是C或字面上的任何其他东西,它是也不是A而不是B.所以这句话总是(不考虑schrödingers法律)返回true.

  • 薛定谔参考+1. (6认同)
  • 从PHP 5.4开始,您也可以使用简写`[]`而不是`array()`. (3认同)
  • 为了使你的第一个答案完全相同,你需要将[in_array()`]的第三个参数(http://php.net/in_array)设置为true来使用严格的比较. (2认同)
  • 您错过了in_array调用的结束括号. (2认同)

Sha*_*ran 17

你可以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"; 
}
Run Code Online (Sandbox Code Playgroud)

  • 在上面的例子中,`uk`是针,它与数组内的所有元素进行比较.由于'uk`存在..找到匹配. (2认同)