2011-06-12 183 views
3

我有我的IF语句的问题,它总是TRUE,虽然这是不正确的。我使用OR运算符,因为我想在IF语句中捕获两种可能的场景。或PHP IF语句

数组字符串ad_status是“1”,但使用下面的-3返回,我期待IF为假。如果我从IF中删除OR和第二条语句,那么IF的结果是正确的。

我做错了什么?谢谢。

if(($getadstatus['ad_status'] != "1" || $getadstatus['ad_status'] != "4")) 
    { 
     return -3; 
     exit; 
    } 

附加: 我想要做的是出口的函数(在这里完全没见过),如果ad_status不等于1或4。如果它等于比1或4,IF语句之外的任何其他值应该返回TRUE并退出。 ad_status可以是0到4之间的任何值。

+2

广告状态*总是*(不等于“1”*或*不等于“4”),因为它一次不能有两个值。你能重申你想要建立的状况吗? – 2011-06-12 10:11:28

+0

该声明将始终返回true。 (如果$ getadstatus ['ad_status']'是1,它不能同时是4等等)你想达到什么目的? – 2011-06-12 10:12:14

+1

humm,好的,我想我明白了。我试图太聪明。我想用单个IF语句来检查两个不相关的条件。如果ad_status不等于1或4,则返回-3并退出该函数。 – Damo 2011-06-12 10:13:13

回答

8

你所说的是,这是not 1 OR是not 4应返回true任意值。

为 '1' 你得到它转换为

if(false || true) 

这是ofcourse真正的声明

if(1 != 1 || 1 != 4) 

你需要的是:

if(!($value == 1 || $value==4)) 

这是一样的(de Morgan's law

if($value != 1 && $value != 4) 
2

这里没有错误。

如果ad_status == 1那么你的第二个条件将让你进入。如果

$getadstatus['ad_status'] != "4" 

因此,真正的你将得到return -3;

,如果我得到你想你应该使用什么AND

if ($a!= 1 AND $a!= 4) 
+1

该死的我需要键入更快:) – onigunn 2011-06-12 10:12:55

+0

我真的失去了一些时间来了解OP想要什么大声笑..这就是为什么我花了3分钟回复:) – dynamic 2011-06-12 10:14:05

2

您查看:

ad_status != 1 -> FALSE 
ad_status != 4 -> TRUE 

if (FALSE OR TRUE)总是TRUE

要成为你所期望的,更换或与AND:

if(($getadstatus['ad_status'] != "1" && $getadstatus['ad_status'] != "4")) 
{ 
    return -3; 
    exit; 
} 
2

这将永远是真实的,同时这两个“1”和“4”的任何值不能为。

2

您应该使用&&运营商,因为使用!=。如果你想使用||,你可以这样写:

if (!($getadstatus['ad_status'] == "1" || $getadstatus['ad_status'] == "4"))

2

你想用& &

if(($getadstatus['ad_status'] != "1" && $getadstatus['ad_status'] != "4")) 
{ 
    return -3; 
    exit; 
} 
1

我个人比较喜欢in_array代替或者在IF语句中。例如:

$array = array(1,4); 

if (!in_array($getadstatus['ad_status'], $array)) { 
// do whatever 

} 
0

赫姆,确定我想我明白了。我试图太聪明。我想用单个IF语句来检查两个不相关的条件。如果ad_status不等于1或4,则返回-3并退出该函数。

好了,没问题,可以表达,只是制定喜欢你写的:

$status = $getadstatus['ad_status']; // assign a variable as it makes things easier to read. 
if (!($status==1 || $status==4)) 
{ 
    return -3; 
} 

所以!(不)应该是全部或比较,因为你在你的句子写了。这可能是代码,你最初的想法。但由于顺序很重要,因此在使用not(!)运算符之前,您的条件的其他部分需要在括号内进行计算。

加了:

的更多的子条件的条件或表达式的一部分,更复杂它得到。但是,越是经常制定复杂的条件,你越会得到更好的条件。为了训练,你总是可以拆分为多行条件和分配标签(变量)的一部分:

$status = $getadstatus['ad_status']; 
$statusIs1or4 = $status==1 || $status==4; 
$statusIsNot1or4 = !$statusIs1or4; 
if ($statusIsNot1or4) return -3; 

对于生产代码,这可能是用眼过度,但它始终是作者的选择如何写东西,你可以做任何语言允许的。