我有这个条件:
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
答案 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);
}