簡體   English   中英

使用數組中的li標簽構建樹菜單

[英]Build a tree menu with li tag from array

我正在檢索一個數組,並且我做了函數來構造該數組,因此它看起來像樹形數組。 如何使用列表標簽(ul,li)制作樹形菜單

function buildTree(array &$elements, $parentId = 0, $elkey = null) {
        $branch = array();

        foreach ($elements as $key=>$element) {
            if ($element[$elkey]['parent_id'] == $parentId) {
                $children = buildTree($elements, $element[$elkey]['id'], $elkey);
                if ($children) {
                    $element['children'] = $children;
                }
                $branch[$element[$elkey]['id']] = $element;
                unset($elements[$key]);
            }
        }
        return $branch;
    }

    $menuTree = buildTree($systemPageCategories, 0, 'SystemPageCategory');
    debug($menuTree);

打印=>

....
...

(int) 5 => array(
        'SystemPageCategory' => array(
            'id' => '5',
            'parent_id' => '0',
            'title' => 'Administration',
            'url' => '',
            'sort' => '5',
            'published' => '1'
        )
    ),
    (int) 6 => array(
        'SystemPageCategory' => array(
            'id' => '6',
            'parent_id' => '0',
            'title' => 'Reports',
            'url' => '',
            'sort' => '6',
            'published' => '1'
        ),
        'children' => array(
            (int) 7 => array(
                'SystemPageCategory' => array(
                    'id' => '7',
                    'parent_id' => '6',
                    'title' => 'Revenue',
                    'url' => '',
                    'sort' => '1',
                    'published' => '1'
                ),
                'children' => array(
                    (int) 13 => array(
                        'SystemPageCategory' => array(
                            'id' => '13',
                            'parent_id' => '7',
                            'title' => 'OBE Finance - Revenue (Current Monthly)',
                            'url' => '',
                            'sort' => '1',
                            'published' => '1'
                        )
                    ),
                    (int) 14 => array(
                        'SystemPageCategory' => array(
                            'id' => '14',
                            'parent_id' => '7',
                            'title' => 'OBE Finance - Revenue (Snapshot Monthly)',
                            'url' => '',
                            'sort' => '2',
                            'published' => '1'
                        )
                    ),

....
...
...

試試這個例子,將$ menuTree變量傳遞給buildMenu函數。

    function buildMenu($menus)
    {
    $data = '';
    foreach ($menus as $key => $menu) {
        if ($key == 'children' && !empty($menu)) {
            $data .= buildMenu($menu);
            continue;
        }

        $data .= '<li><a href="'.$menu['url'].'">'.$menu['title'].'</a></li>';
    }

    if (!empty($data)) {
        $data .= '<ul>'.$data.'</ul>';
    }

    return $data;
   }
//build Tree structure from array
function buildTree(array &$elements, $parentId = 0, $elkey = null) {
    $branch = array();

    foreach ($elements as $key=>$element) {
        if ($element[$elkey]['parent_id'] == $parentId) {
            $children = buildTree($elements, $element[$elkey]['id'], $elkey);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[$element[$elkey]['id']] = $element;
            unset($elements[$key]);
        }
    }
    return $branch;
}
//Build Menu       
function buildMenu($arr, $elmkey) {
    echo "<ul>";
    foreach ($arr as $val) {
            if (!empty($val['children'])) {
                    echo "<li>" . $val[$elmkey]['title'];
                    menu($val['children'], $elmkey);
                    echo "</li>";
            } else {
                    echo "<li>" . $val[$elmkey]['title'] . "</li>";
            }
    }
    echo "</ul>";
}

$menuTree = buildTree($systemPageCategories, 0, 'SystemPageCategory');
echo menu($menuTree, 'SystemPageCategory'); 

buildMenu()參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM