PHP if()状态保持评估为true,即使它不是

时间:2013-02-20 21:20:46

标签: php function if-statement

我有最艰难的时间来解决这个问题,我似乎无法找到答案。

以下是我要做的事情:我的网站上有不同的导航菜单,具体取决于部分。我已经预先构建了不同的变体,并在每个页面上声明$ linkbox_array,这是我页面上导航菜单的链接数组。在某些页面上,我水平显示,而其他页面垂直显示垂直时,我需要将免责声明添加到堆叠链接框的底部。

所以我的函数试图这样说:如果$ linkbox_array是$ general_linkboxes而$ bodyClass是“withSidebar”,那么在数组项2之后回显一个免责声明。否则,只需回显数组项。

所以这就是我写的(请原谅我,如果它很糟糕,我是新手):

function display_linkboxes($array) {
    if ($linkbox_array == $general_linkboxes && $bodyClass = "withSidebar") {
        foreach ($array as $linkbox) {
            if ($linkbox == $array[2]) {
                echo $linkbox;
                global $general_disclaimer;
                echo $general_disclaimer;
            } else { 
                echo $linkbox;  
            } 
        }
    } else {
        foreach ($array as $linkbox) {
            echo $linkbox;  
        }
    }
}

问题在于,即使两个条件不成立,它也会继续吐出$ general_disclaimer。我试图解构函数并找出我出错的地方,并且我意识到我的if语句总是评估为true,即使我输入了jibberish。例如:

function display_linkboxes($array) {
    if ($linkbox_array == $askjfdalfjk) {
        foreach ($array as $linkbox) {
            echo $linkbox;
        }
    }
}

即使$ askjfdalfjk不存在,此计算结果为true并显示链接。然后我遇到了相反的问题。即使if语句的计算结果为true,也不会显示链接:

function display_linkboxes($array) {
    if ($bodyClass == "withSidebar") {
        foreach ($array as $linkbox) {
            echo $linkbox;
        }
    }
}

世界上我做错了什么?!?!非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

在您的代码中:

function display_linkboxes($array) {
    if ($linkbox_array == $general_linkboxes && $bodyClass = "withSidebar") {
...

$ linkbox_array,$ general_linkboxes和$ bodyClass不在此函数的范围内,这意味着它们彼此相等,因为它们都不存在。您需要将它们作为变量传递给函数(推荐),或者将代码更改为以下内容:

function display_linkboxes($array) {
    global $linkbox_array, $general_linkboxes, $bodyClass;
    if ($linkbox_array == $general_linkboxes && $bodyClass == "withSidebar") {
...

我已编辑此答案以包含= - > ==修复$ bodyClass

答案 1 :(得分:0)

你的if条件只需要一些重构:

if(($linkbox_array == $general_linkboxes) && ($bodyClass == "withSidebar")) {}

单个'='是一个赋值操作,总是评估为true。

A ==是您正在寻找的条件等于操作。

此外,如果您正在检查数组相等性和顺序问题,那么您应该使用'==='运算符,该运算符不仅检查相同的元素,还检查相同的顺序

最后你有一个范围问题 - 如果你的链接盒数组的评估等于一个null变量,那么它还没有被定义。您可以使用print_r()操作来检查这一点。如果数组是在函数外定义的,那么你应该将它作为参数传递给函数。

答案 2 :(得分:0)

可能你在你的功能之外设置$linkbox_array,那么你的功能不知道它,除非你...

function display_linkboxes($array) {
     global $linkbox_array; // <------ now the variable exists within the function.
     if ($linkbox_array == $askjfdalfjk) {
         foreach ($array as $linkbox) {
             echo $linkbox;
         }
     }
 }

$bodyClass

相同