0

我在解决这个问题时遇到了最艰难的时期,但我似乎找不到答案。

这就是我想要做的:根据部分,我的网站上有不同的导航菜单。我已经预先构建了不同的变体,并在每个页面上声明 $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,即使我加入了胡言乱语。例如:

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;
        }
    }
}

我到底做错了什么?!?!任何帮助是极大的赞赏!

4

3 回答 3

0

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

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

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

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

此外,如果您正在检查数组是否相等并且顺序对您很重要,那么您应该使用 '===' 运算符,它不仅检查相同的元素,而且检查相同的顺序

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

于 2013-02-20T21:25:46.223 回答
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

于 2013-02-20T21:26:04.210 回答
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

于 2013-02-20T21:24:29.580 回答