建立与阵列里标签的树形菜单 [英] Build a tree menu with li tag from array

查看:142
本文介绍了建立与阵列里标签的树形菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我检索一个数组,我做了功能到结构数组,所以它看起来树阵。如何使列表标签(UL,LI)

树形菜单

 函数buildTree(阵列和放大器; $元素,$ parentId的= 0,$ elkey​​ = NULL){
        $分公司=阵列();        的foreach($元素$关键=> $元素){
            如果($元素[$ elkey​​] ['PARENT_ID'] == $ parentId的){
                $儿童= buildTree($元素,$元素[$ elkey​​] ['身份证'],$ elkey​​);
                如果($子女){
                    $元素['孩子'] = $儿童;
                }
                $分支[$元素[$ elkey​​] ['身份证'] = $元素;
                未设置($元素[$关键]);
            }
        }
        返回$分公司;
    }    $ menuTree = buildTree($ systemPageCategories,0,'SystemPageCategory');
    调试($ menuTree);

打印=>

  ....
...(INT)5 =>阵列(
        SystemPageCategory'=>阵列(
            'ID'=> 5,
            PARENT_ID'=> 0,
            '标题'=> '行政',
            'URL'=> '',
            '排序'=> 5,
            '发表'=> '1'
        )
    )
    (INT)6 =>阵列(
        SystemPageCategory'=>阵列(
            'ID'=> '6',
            PARENT_ID'=> 0,
            '标题'=> 报告,
            'URL'=> '',
            '排序'=> '6',
            '发表'=> '1'
        )
        '孩子'=>阵列(
            (INT)7 =>阵列(
                SystemPageCategory'=>阵列(
                    'ID'=> '7',
                    PARENT_ID'=> '6',
                    '标题'=> '收入',
                    'URL'=> '',
                    '排序'=> '1',
                    '发表'=> '1'
                )
                '孩子'=>阵列(
                    (INT)13 =>阵列(
                        SystemPageCategory'=>阵列(
                            'ID'=> '13',
                            PARENT_ID'=> '7',
                            '标题'=> OBE财务 - 收入(当前每月),
                            'URL'=> '',
                            '排序'=> '1',
                            '发表'=> '1'
                        )
                    )
                    (INT)14 =>阵列(
                        SystemPageCategory'=>阵列(
                            'ID'=> '14',
                            PARENT_ID'=> '7',
                            '标题'=> OBE财务 - 收入(每月快照),
                            'URL'=> '',
                            '排序'=> '2',
                            '发表'=> '1'
                        )
                    )....
...
...


解决方案

  //修建从阵列树形结构
功能buildTree(阵列和放大器; $元素,$ parentId的= 0,$ elkey​​ = NULL){
    $分公司=阵列();    的foreach($元素$关键=> $元素){
        如果($元素[$ elkey​​] ['PARENT_ID'] == $ parentId的){
            $儿童= buildTree($元素,$元素[$ elkey​​] ['身份证'],$ elkey​​);
            如果($子女){
                $元素['孩子'] = $儿童;
            }
            $分支[$元素[$ elkey​​] ['身份证'] = $元素;
            未设置($元素[$关键]);
        }
    }
    返回$分公司;
}
//生成菜单
功能buildMenu($改编,$ elmkey){
    回声< UL>中;
    的foreach($改编为$ VAL){
            如果(!空($ VAL ['孩子'])){
                    回声<立GT; 。 $ VAL [$ elmkey] ['标题'];
                    菜单($ VAL ['孩子'],$ elmkey);
                    回声< /李>中;
            }其他{
                    回声<立GT; 。 $ VAL [$ elmkey] ['标题']。 < /李>中;
            }
    }
    回声< / UL>中;
}$ menuTree = buildTree($ systemPageCategories,0,'SystemPageCategory');
回声菜单($ menuTree,'SystemPageCategory');

<一个href=\"http://stackoverflow.com/questions/21060598/create-a-ul-li-menu-from-a-tree-like-array/21060940#21060940\">buildMenu()参考

I am retrieving an array and I made function to structure the array so it looks tree array. How to make tree menu with list tag (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);

print =>

....
...

(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'
                        )
                    ),

....
...
...

解决方案

//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() Reference

这篇关于建立与阵列里标签的树形菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆