解析 PHP 菜单系统 3d 数组.修改以允许我指定父页面并返回子页面


Parsing PHP Menu System 3d Array. Modification to allow me to specify Parent and return Child Pages

我构建了一个包含网站菜单系统的数组:


$menu = array(
    'Page_1' => array(
        'display' => 'Page 1'
    ),
    'Page_2' => array(
        'display' => 'Page 2',
        'sub' => array(
            'Sub_Page_1' => array(
                'display' => 'Sub Page 1'
            )
        )
    ),
    'Page_3' => array(
        'display' => 'Page 3',
        'sub' => array(
            'Sub_Page_2' => array(
                'display' => 'Sub Page 2'
            ),
            'Sub_Page_3' => array(
                'display' => 'Sub Page 3'
            )
        )
    )
);

我使用以下函数将菜单系统解析并输出为嵌套的无序列表。


function Build_Menu($menu_array,$is_sub){
    $attr = (!$is_sub) ? ' class="menu"' : ' class="submenu"';
    $menu = "<ul$attr>";
    foreach($menu_array as $id => $properties){
        foreach($properties as $key => $val){
            if(is_array($val)){
                $sub = Build_Menu($val,TRUE);
            }
            else{
                $sub = NULL;
                $$key = $val;
            }
        }
        $menu .= '<li><a href="#">'.$display.'</a>'.$sub.'</li>';
        unset($url, $display, $sub);
    }
    return $menu . "</ul>";
}

这工作正常,并生成如下列表:

Page 1
Page 2
    Sub Page 1
Page 3
    Sub Page 2
    Sub Page 3

我陷入困境的地方是我现在正在寻求修改函数,以便我可以传入父页面并返回该父页面的子页面。

像这样:

function Build_Menu($menu_array,$is_sub,'Page 2'({ ...}

这将生成以下输出:

Page 2
    Sub Page 1

function Build_Menu($menu_array,$is_sub,'Page 3'({ ...}

这将产生:

Page 3
    Sub Page 2
    Sub Page 3

重要的是,该函数保持递归,因此无论有多少子级别,它们都将作为函数的一部分输出。计划是每个页面的"显示"值将成为唯一标识符。

任何帮助将不胜感激,因为我已经为此兜圈子了几个小时!

非常感谢,詹姆斯。

看起来有点像重新发明轮子。您可能希望使用您选择的搜索引擎来查找"php 树结构"或查看 SPL 中的堆和双链表。http://www.php.net/manual/en/spl.datastructures.php

你不能这样做吗?

function Build_Sub_Menu($menu, $key) {
   return Build_Menu(array($menu[$key]), false);
}
echo Build_Sub_Menu($menu, 'Page_2');

当然,您可以在Build_Menu内部执行相同的操作,但我认为另一个功能更容易理解和维护。

您来验证$key是否存在于$menu中。