PHP if语句忽略变量检查

时间:2012-12-14 19:06:30

标签: php if-statement

我的if语句一直在查看我的一个变量并查看or语句并返回true。我不喜欢在显示之前描述编码......

if($relLoc[1] <= "32" AND $map['locationpadding'] == "0px 0px -32px 0px" OR $map['locationpadding'] == "0px 0px -32px -32px" OR $map['locationpadding'] == "0px -32px -32px 0px")
{
    die();
}

所以,如果我在$map['locationpadding'] == "0px 0px -32px -32px",那么 $relLoc[1] == "380" die();仍然执行。

但是,如果我在0px 0px -32px 0px它将不会执行,直到我在32位置。

2 个答案:

答案 0 :(得分:2)

您没有正确分组逻辑语句。我不知道PHP所以语法可能会关闭但你基本上想要这个:

if($relLoc[1] <= "32"  AND **(** $map['locationpadding'] == "0px 0px -32px 0px" OR $map['locationpadding'] == "0px 0px -32px -32px" OR $map['locationpadding'] == "0px -32px -32px 0px"**)** ){
            die();
        }

注意附加的括号表示正确的布尔语句组。您在原始帖子中所做的是:

if relLoc == 32 AND  $map['locationpadding'] == "0px 0px -32px 0px

  +  
OR $map['locationpadding'] == "0px 0px -32px -32px"   
  + 
OR $map['locationpadding'] == "0px -32px -32px 0px

所以在你提供的样本中就是这样:

$map['locationpadding'] == "0px 0px -32px -32px" and the $relLoc[1] == "380" 

是:

   False + True + False = True

答案 1 :(得分:0)

看起来你想要:

if($relLoc[1] <= "32" AND ($map['locationpadding'] == "0px 0px -32px 0px" OR $map['locationpadding'] == "0px 0px -32px -32px" OR $map['locationpadding'] == "0px -32px -32px 0px")){
//                        ^ added                                                                                                                                                ^ added

使用括号分隔子条件,否则您的第一个条件变得不那么相关,因为在此之后您有OR x OR x OR x,因此只有一个OR必须evauluate为true才能将整个条件评估为true。 / p>