根据两个值测试变量

时间:2016-03-09 16:20:49

标签: php

我有这个条件:

if( ($extension !== ".com") || ($extension !== ".fr") ) {
  unset($value);
} else {
  echo $value.'<br>';
}

我想从扩展名不是&#34; .com&#34;的数组中删除项目。或&#34; .fr&#34;。
但是数组中的每个项都没有设置。我认为我的情况不对。

这里是数组中的列表项:

  

urltest.com
  urltest.fr
  url-testdeux.com
  urltestthree.uk

4 个答案:

答案 0 :(得分:3)

您希望使用&&而不是||,如下所示: -

if ($extension !== ".com" && $extension !== ".fr") {
}

或者你可以这样做: -

if (!in_array($extension, [".com", ".fr"])) {
}

答案 1 :(得分:0)

您需要使用&&,而不是||

if (!a || !b)将始终成功,因为$extension不能同时为两个不同的值,因此!a!b中的一个将评估为true,从而使整个表达真实。

答案 2 :(得分:0)

让我们用两个例子来分解正在发生的事情:&#34; .org&#34;和&#34; .com&#34;:

&#34;。组织&#34;:

($extension !== ".com") || ($extension !== ".fr")

将产生:

true || true

因为&#34; .org&#34;不等于两者。这将按预期工作。

让我们来看看&#34; .com&#34;。这将产生:

false || true

对于同时属于&#34; .com&#34;的商品,您的情况只会是假的。和&#34; .fr&#34;。

相反,您可能希望使用&&

更好的是扭转逻辑以使其更清晰:

    if( ($extension === ".com") || ($extension === ".fr") ) {
        echo $value.'<br>';
    } else {
        unset($value);
    }

答案 3 :(得分:0)

使用||不包括.com和.fr。因为只有一部分语句必须为true才能通过.uk不是.com,所以声明是真的,但.com不是.fr所以声明会再次成立。和&amp;&amp;运算符意味着必须传递两个要求。由于.com不是.fr,其中一个测试失败,语句将失败。由于.uk既不是.com也不是.fr,它会评价为真。

(($extension !== ".com") && ($extension !== ".fr")) 

或者如果你想使用||,你可以切换你的真假陈述:

if( ($extension !== ".com") || ($extension !== ".fr") ) {
       echo $value.'<br>';
  } else {
         unset($value);
  }