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

时间:2013-11-13 09:23:11

标签: 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

  }

?>

<?php

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

    // Do something else

  }

?>

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

注意:是的,它们不同,我希望有不同的方法来缩短代码。

7 个答案:

答案 0 :(得分:97)

对于您的第一个代码,您可以使用the answer given by @ShankarDamodaranin_array()进行简短的更改:

if ( !in_array($some_variable, array('uk','in'), true ) ) {
@porty在评论

中指出,自PHP 5.4起可用<{1>或更短的[]符号

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.因此该声明始终(未考虑schrödingers法则)返回true。

答案 1 :(得分:15)

您可以在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"; 
}

答案 2 :(得分:1)

如果您计划在if语句中构建函数,我还建议使用in_array。它更清洁了。

如果您尝试为变量赋值,可以使用if / else简写:

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

答案 3 :(得分:1)

您需要进行多值检查。请尝试使用以下代码:

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

答案 4 :(得分:1)

尤其是在多次进行此测试并且您正在运行PHP 7+并且安装了Set类的情况下,另一种可能有意义的选择是:

use Ds\Set;

$strings = new Set(['uk', 'in']);    
if (!$strings->contains($some_variable)) {

或者在任何版本的PHP上,您都可以使用关联数组来模拟集合:

$strings = ['uk' => 1, 'in' => 1];
if (!isset($strings[$some_variable])) {

创建集合时会产生额外的开销,但是每个测试随后都会成为O(1)操作。当然,所比较的字符串列表越长,节省的费用就越大。

答案 5 :(得分:0)

一些基本的正则表达式可以很好地解决$some_variable !== 'uk' && $some_variable !== 'in':

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

答案 6 :(得分:0)

您可能会更容易理解颠倒逻辑并使用带有空if的else语句。

if($some_variable === 'uk' || $another_variable === 'in'){}

else {
    // This occurs when neither of the above are true
}