递归菜单codeigniter + mysql

时间:2013-03-26 17:44:41

标签: mysql codeigniter

辅助功能:

function build_menu($menus, $parent = 0, $level = 0)
    {
            $ret = '<ul>';
            foreach($menus as $m)
            {
                if($m->parent_id == $parent)
                {
                        $ret .= '<li>'.set_link($m->url, $m->title);
                        $ret .= build_menu($menus, $m->id, $level + 1);
                        $ret .= '</li>';

                }
            }
            return $ret.'</ul>';
    }

呼叫:

$data['query'] = $this->db->get('menus');
$data['menu'] = build_menu($data['query']->result());

该函数只构建三个叶子,例如,如果父级为0,则将呈现所有带有parent_id = 0的菜单,但是如何在不对mysql进行多查询的情况下渲染完整的三个菜单?

的print_r:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [title] => menu1
            [url] => menu1
            [parent_id] => 0
        )

    [1] => stdClass Object
        (
            [id] => 2
            [title] => menu2
            [url] => menu2
            [parent_id] => 0
        )

    [2] => stdClass Object
        (
            [id] => 3
            [title] => menu3
            [url] => menu3
            [parent_id] => 3
        )

    [3] => stdClass Object
        (
            [id] => 4
            [title] => menu4
            [url] => menu4
            [parent_id] => 6
        )

    [4] => stdClass Object
        (
            [id] => 6
            [title] => test
            [url] => test
            [parent_id] => 3
        )

    [5] => stdClass Object
        (
            [id] => 7
            [title] => test
            [url] => test
            [parent_id] => 4
        )

)

0 个答案:

没有答案