用于管理导航功能的PHP嵌套数组将不起作用

时间:2014-02-19 02:19:28

标签: php arrays loops foreach nested

有人可以告诉我为什么这不起作用吗?

“isTrue”=> true实际上是一个确定该字段的内容是否存在的函数,我已经var_dumped它并且它可以工作。

我正在尝试输出导航链接中的一个(或全部,取决于“isTrue”=> true),如下所示:

<li><a class="gallery-tab" href="#gallery-tab">gallery</a></li>

作为内容类型特定的导航元素。我以前的工作方式比较粗糙,但是我试图让我的代码更易于维护,这对我来说是一个令人沮丧的障碍。

当我运行下面的代码时,我得到NULL

虽然我对PHP非常熟悉,但我不是经验丰富的兽医。通常,当我向你们展示这样的问题时,有人会很快看到这些问题而且我一直在试图解决问题时碰到我的头。

以下是相关代码:

<?php

$navArray[0] = array(
    "title" => "statement",
    "class" => "statement-tab",
    "isTrue" => true
);
$navArray[1] = array(
    "title" => "gallery",
    "class" => "gallery-tab",
    "isTrue" => true
);
$navArray[2] = array(
    "title" => "video",
    "class" => "video-tab",
    "isTrue" => true
);
$navArray[3] = array(
    "title" => "poetry",
    "class" => "poetry-tab",
    "isTrue" => true
);

function get_nav() {
    foreach ($navArray as $array ) {
        if ($array["isTrue"] == true) {

            $output = "";
            $output = $output . "<li>";
            $output = $output . '<a class="' . $array["class"] . '" href="#' . $array["class"] . '" />';
            $output = $output . $array["title"];
            $output = $output . "</a>";
            $output = $output . "</li>";

            return $output;

        }
    }
}

$getNav = get_nav();

 ?>

<pre><?php var_dump($getNav); ?></pre>

如果有任何不清楚的地方,请告诉我,我会尽力澄清。

编辑: zeantsoi善意地指出我正在调用错误的数组。我修好并测试了它,但仍然没有运气。

2 个答案:

答案 0 :(得分:0)

您的代码中必须更改三件事:

1 - 呼叫$navArray而不是$nav_array

2 - $output = "";必须在foreach循环之前。

3 - return $output;必须在get_nav()函数的末尾,如果您打算获得整个$navArray的输出。

答案 1 :(得分:0)

我可以看到几个问题。首先,$nav_array不存在。即使假设它应该是$navArray,它仍然不存在于函数的范围内。我建议这样的事情:

function get_nav($navArray) {
    foreach($navArray as $array) {
...
$getNav = get_nav($navArray);

第二个问题是你只会得到第一个导航项,因为你正在编译并在循环中返回输出。所以你需要将它更新为:

function get_nav($navArray) {
    $output = "";
    foreach($navArray as $array) {
        if ($array["isTrue"] == true) {
            $output .= "<li>";
            $output .= '<a class="' . $array["class"] . '" href="#' . $array["class"] . '" />';
            $output .= $array["title"];
            $output .= "</a>";
            $output .= "</li>";
        }
    }
    return $output;
}