php实现无限极菜单显示

1.单纯的php数组实现效果:

function son($array, $pId=0) {
    $result = array();
    foreach($array as $key => $val){
        if(isset($val['parent_id']) && ($val['parent_id'] == $pId)) {
            $tmp = $array[$key];
            unset($array[$key]);
            if(count(son($array,$val['cate_id'])) > 0){
                $tmp['son'] = son($array,$val['cate_id']);
            }
            $result[] = $tmp;
        }
    }
    return $result;
}

2.页面需要支持的方法如下:

无限极分类在开发中经常使用,例如:部门结构、文章分类。无限极分类的难点在于“输出”和“查询”,例如

将文章分类输出为
    列表形式; 查找分类A下面所有分类包含的文章。 1.实现原理

    在《无限级分类实现思路》一文中介绍了几种常见的实现方法,各有利弊。其中“改进前序遍历树”数据结构,便于输出和查询,但是在移动分类和常规理解上有些复杂。

    2.数据结构idfidtitle
    1 0 中国
    2 1 江苏
    3 1 安徽
    4 8 江阴
    5 3 芜湖
    6 3 合肥
    7 3 蚌埠
    8 2 无锡
    1, fid=>0, title => 中国), 
            array(id=>2, fid=>1, title => 江苏),
            array(id=>3, fid=>1, title => 安徽),
            array(id=>4, fid=>8, title => 江阴),
            array(id=>5, fid=>3, title => 芜湖),
            array(id=>6, fid=>3, title => 合肥),
            array(id=>7, fid=>3, title => 蚌埠),
            array(id=>8, fid=>8, title => 无锡)
        );
    ?>

    各分类之间通过父类id(即fid)进行级别“串联”,形成一棵分类树。在进行串联时候有一点值得注意:分类A的fid不可以是其子类的id。

    在使用这种数据结构进行输出时最常用的算法就是“递归”,熟悉PHP语言的朋友肯定知道,PHP不擅长递归 ,而且递归次数有限(100次左右,因操作系统和配置而异)。

    由于所有的递归均可以使用循环实现,本文根据PHP语言特点编写了一套关于“无限级”分类的函数,相比递归实现而言效率更高

    3.输出ul列表形式

    将上述数据输出为下面的HTML

    • 江苏
      • 无锡
        • 江阴
    • 安徽
      • 芜湖
      • 合肥
      • 蚌埠

    这种HTML结构在前端使用(使用JavaScript和CSS构造可折叠树)十分方便。具体实现程序如下:

    4.输出option列表形式

    具体实现程序如下: