2

我有这个数组,称为$nested(它很长,但我试图得到一个全面的场景):

Array
(
    [1] => Array
        (
            [id] => 1
            [parent] => 0
            [title] => Page 1
        )

    [2] => Array
        (
            [id] => 2
            [parent] => 0
            [title] => Page 2
        )

    [3] => Array
        (
            [id] => 3
            [parent] => 0
            [title] => Page 3
        )

    [4] => Array
        (
            [id] => 4
            [parent] => 0
            [title] => Page 4
        )

    [5] => Array
        (
            [id] => 5
            [parent] => 0
            [title] => Page 5
        )

    [6] => Array
        (
            [id] => 6
            [parent] => 1
            [title] => Page 1-1
        )

    [7] => Array
        (
            [id] => 7
            [parent] => 1
            [title] => Page 1-2
        )

    [8] => Array
        (
            [id] => 8
            [parent] => 1
            [title] => Page 1-3
        )

    [9] => Array
        (
            [id] => 9
            [parent] => 2
            [title] => Page 2-1
        )

    [10] => Array
        (
            [id] => 10
            [parent] => 2
            [title] => Page 2-2
        )

    [11] => Array
        (
            [id] => 11
            [parent] => 2
            [title] => Page 2-3
        )

    [12] => Array
        (
            [id] => 12
            [parent] => 3
            [title] => Page 3-1
        )

    [13] => Array
        (
            [id] => 13
            [parent] => 3
            [title] => Page 3-2
        )

    [14] => Array
        (
            [id] => 14
            [parent] => 4
            [title] => Page 4-1
        )

    [15] => Array
        (
            [id] => 15
            [parent] => 6
            [title] => Page 1-1-1
        )

    [16] => Array
        (
            [id] => 16
            [parent] => 6
            [title] => Page 1-1-2
        )

    [17] => Array
        (
            [id] => 17
            [parent] => 6
            [title] => Page 1-1-3
        )

    [18] => Array
        (
            [id] => 18
            [parent] => 7
            [title] => Page 1-2-1
        )

    [19] => Array
        (
            [id] => 19
            [parent] => 7
            [title] => Page 1-2-2
        )

    [20] => Array
        (
            [id] => 20
            [parent] => 7
            [title] => Page 1-2-3
        )

    [21] => Array
        (
            [id] => 21
            [parent] => 9
            [title] => Page 2-1-1
        )

    [22] => Array
        (
            [id] => 22
            [parent] => 9
            [title] => Page 2-1-2
        )

    [23] => Array
        (
            [id] => 23
            [parent] => 9
            [title] => Page 2-1-3
        )

)

使用这个递归函数:

function recursive($parent, $array) {
    $has_children = false;
    foreach($array as $key => $value) {
        if ($value['parent'] == $parent) {       
            if ($has_children === false && $parent) {
                $has_children = true;
                echo '<ul>' ."\n";
            }
            echo '<li>' . "\n";
                echo '<a href="/page.php?id=' . $value['id'] . '">' . $value['title'] . '</a>' . " \n";
            echo "\n";
                recursive($key, $array);
            echo "</li>\n";
        }
    }
    if ($has_children === true && $parent) echo "</ul>\n";
}

<ul><?php echo recursive(0, $nested); ?></ul>

我很容易得到这个输出:

到现在为止还挺好。

现在,我不想一次显示整个树,而是在用户单击页面/子页面时更深入,如下所示:

URL:http://www.example.com/page.php,初始状态(“展开”所有父项 = 0)


URL:http ://www.example.com/page.php?id =1(展开所有父项 = 1)


网址:http ://www.example.com/page.php?id =6(展开所有父项 = 6)

等等

对我来说似乎是一项不可能完成的任务,请帮忙?提前致谢

4

2 回答 2

0

您快到了。只有一个小问题:而不是recursive($key, $array)你需要recursive($key + 1, $array). 尽管如此,正如其他人所说,如果您只是使用 PHP 生成整个输出然后使用 javascript 控制它,这会更好。每次用户单击项目时都重新加载页面确实不是一个好的用户体验。

于 2013-08-10T17:40:38.703 回答
0

最后这就是我所做的,它工作得很好:

// create array of ancestors' ID from current page
function path($page = 0) {
    global $database_connApp, $connApp;
    // let's create arrays
    do {
        mysql_select_db($database_connApp, $connApp);
        $query_rsPage = "SELECT pages.pag_id FROM pages WHERE pages.pag_id = " . $page;
        $rsPage = mysql_query($query_rsPage, $connApp) or die(mysql_error());
        $row_rsPage = mysql_fetch_assoc($rsPage);
        $bid[] = $row_rsPage['pag_id'];
        $page = $row_rsPage['pag_parent'];
    } while ($page > 0);

    // move to the last array index
    end($bid);
    $output = $bid;
    return $output;
}

// create the menu
function fmenu($parent, $array, $path) {
    $has_children = false;
    foreach($array as $key => $value) {
        if (in_array($value['parent'], $path)) {
            if ($value['parent'] == $parent) {
                if ($has_children === false && $parent) {
                    $has_children = true;
                    echo '<ul>' ."\n";
                }
                $active = ($_GET['iData'] == $value['id']) ? ' class="active"' : '';
                echo '<li' . $active . '>' . "\n";
                    echo '<a href="../pagine/' . $value['id'] . '/' . slugify($value['title']) . '.htm">' . html($value['title']) . '</a>' . " \n";
                echo "\n";
                    fmenu($key, $array, $path);
                echo "</li>\n";
            }
        }
    }
    if ($has_children === true && $parent) echo "</ul>\n";
}

echo fmenu(0, $nested, path($row_rsEdit['pag_id']));
于 2013-08-11T10:42:57.860 回答