频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> PHP教程 -> 理论上实现真正意义的无限级别菜单

理论上实现真正意义的无限级别菜单

作者:未知  来源:转载  发布时间:2005-7-21 8:50:20  发布人:acx

减小字体 增大字体

很久没用php了,为了加深数据结构的基本知识(为考试准备),练习一下基本的算法,当然还是为了以后使用php做菜单的时候免得麻烦。
算法:数据结构中的最基本的树与二叉树的转换
大家凑合着看吧!因为只是为了熟悉一下算法,没有做具体的测试,同时对数据库的操作没有封装成类,大家如果需要可以自行修改或者和我联系!


Your data must save like this:
id,topic,child_l,parent,child_r,content

file name:
show.inc.php
codes:
==================================================
<?

class shows{
    var $items;
    var $the_stack;
    var $count=0;
    

    function find($l_value) {
        for($j=1;$j<=$this->items["info_all"];$j++) {
            if($l_value==$this->items["d_id][$j]"])
            { return($j);exit; }
        
        }
            
    }
        
        
    function m_l_r_list($i) {
    
        if(($this->items["f_node][$i]"]==0)&&($this->items["r_node][$i]"]==0)&&($this->items["l_node][$i]"]!=-1))
        {//if it is root node!!!
            echo "<table><tr><td>";
            echo "<img id=image".$i." src=\"c.gif\" onclick=outliner() style=\"cursor:hand\" child=\"".$i."ALL\" NAME=\"NAME_".$i."ALL\">";
            echo "<a href=\"".$this->pages_0($this->items["d_id][$i]"])."?d_id=".$this->items["d_id][$i]"]."\" target=\"rightFrame\">".$this->items["node_value][$i]"]."</a>";
            echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target=\"rightFrame\"><font size=2 color=red>Add</font></a>";
            echo "</td></tr></table>";
            echo "<div class=collapsed id=".$i."ALL>";
            $i=$this->find($this->items["l_node][$i]"]);
            $this->count=$this->count+2;
            $this->m_l_r_list($i);
            exit;
        }
        if(($this->items["f_node][$i]"]==0)&&($this->items["r_node][$i]"]==0)&&($this->items["l_node][$i]"]==-1))
        {
            exit;
        }
         if(($this->items["f_node][$i]"]!=0)&&($this->items["r_node][$i]"]!=0)&&($this->items["l_node][$i]"]!=0))
         {//if node have left and right child
             $current_node=$this->items["d_id][$i]"];
             
             if(($this->items["l_node][$i]"]==-1)&&($this->items["r_node][$i]"]==-1)) {
                $i=$this->find($this->items["f_node][$i]"]);
                if(($this->items["r_node][$i]"]==$current_node)) {//his parent use right point
                    $this->items["r_node][$i]"]=-1;
                }
                if(($this->items["l_node][$i]"]==$current_node)) {//his parent use left point
                    $this->items["l_node][$i]"]=-1;
                }
                $this->count=$this->count-2;
                $this->m_l_r_list($i);
            }//if left child and right child have been visited up to his parent node
            
             if(($this->items["l_node][$i]"]!=-1)&&($this->items["r_node][$i]"]!=-1)) {
                echo "<table><tr><td>";
                for ($k=0;$k<$this->count;$k++) { echo " ";}
                echo "<img id=image".$i." src=\"c.gif\" onclick=outliner() style=\"cursor:hand\" child=\"".$i."ALL\" NAME=\"NAME_".$i."ALL\">";
                echo "<a href=\"main.php?d_id=".$this->items["d_id][$i]"]."\" target=\"rightFrame\">".$this->items["node_value][$i]"]."</a>";
                //echo $this->items["node_value][$i]"];
                echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target=\"rightFrame\"><font size=2 color=red>Add</font></a>";
                echo " <a href=delnode.php?id=".$this->items["d_id][$i]"]."><font size=2 color=red>Del</font></a>";
                echo "</td></tr></table>";
                echo "<div class=collapsed id=".$i."ALL>";
                $i=$this->find($this->items["l_node][$i]"]);//visite left child node
                 $this->count=$this->count+2;
                 $this->m_l_r_list($i);
            }//if left child node and right child node have not been visited
             
             if(($this->items["l_node][$i]"]==-1)&&($this->items["r_node][$i]"]!=-1)) {
                 $i=$this->find($this->items["r_node][$i]"]);//visite right child node
                 $this->m_l_r_list($i);
            }//if left child node have been visited and right child node have not been visited     
             
         }
         
        if(($this->items["f_node][$i]"]!=0)&&($this->items["r_node][$i]"]==0)&&($this->items["l_node][$i]"]!=0))
        {//if node only have left child
            $current_node=$this->items["d_id][$i]"];
            if($this->items["l_node][$i]"]!=-1) {
                echo "<table><tr><td>";
                for ($k=0;$k<$this->count;$k++) { echo " ";}
                echo "<img id=image".$i." src=\"c.gif\" onclick=outliner() style=\"cursor:hand\" child=\"".$i."ALL\" NAME=\"NAME_".$i."ALL\">";
                echo "<a href=\"main.php?d_id=".$this->items["d_id][$i]"]."\" target=\"rightFrame\">".$this->items["node_value][$i]"]."</a>";
                //echo $this->items["node_value][$i]"];
                echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target=\"rightFrame\"><font size=2 color=red>Add</font></a>";
                echo " <a href=delnode.php?id=".$this->items["d_id][$i]"]."><font size=2 color=red>Del</font></a>";
                echo "</td></tr></table>";
                echo "<div class=collapsed id=".$i."ALL>";
                $i=$this->find($this->items["l_node][$i]"]);//visite left child node
                $this->count=$this->count+2;
                $this->m_l_r_list($i);
                exit;
            }//if his left child node have not been visited
            
            if($this->items["l_node][$i]"]==-1) {
                echo "</div>";
                $i=$this->find($this->items["f_node][$i]"]);
                if(($this->items["r_node][$i]"]==$current_node)) {//his parent use right point
                    $this->items["r_node][$i]"]=-1;
                }
                if(($this->items["l_node][$i]"]==$current_node)) {//his parent use left point
                    $this->items["l_node][$i]"]=-1;
                    $this->count=$this->count-2;
                }
                $this->m_l_r_list($i);
                exit;
            }//if his left child node have been visite,up to his parent node

            
        }
        if(($this->items["f_node][$i]"]!=0)&&($this->items["r_node][$i]"]!=0)&&($this->items["l_node][$i]"]==0))
        {//if node only have right child
            $current_node=$this->items["d_id][$i]"];
            $j=$this->find($this->items["f_node][$i]"]);
            if($this->items["r_node][$i]"]!=-1) {
                echo "<table><tr><td>";
                for ($k=0;$k<$this->count;$k++) { echo " ";}
                echo "<a href=\"main.php?d_id=".$this->items["d_id][$i]"]."\" target=\"rightFrame\">".$this->items["node_value][$i]"]."</a>";
                //echo $this->items["node_value][$i]"];
                echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target=\"rightFrame\"><font size=2 color=red>Add</font></a>";
                echo " <a href=delnode.php?id=".$this->items["d_id][$i]"]."><font size=2 color=red>Del</font></a>";
                echo "</td></tr></table>";
                $i=$this->find($this->items["r_node][$i]"]);//visite right child node
                $this->m_l_r_list($i);
                exit;
            }//if his right child node have not been visited
            
            if($this->items["r_node][$i]"]==-1) {
                $i=$this->find($this->items["f_node][$i]"]);
                if(($this->items["r_node][$i]"]==$current_node)) {//his parent use right point
                    $this->items["r_node][$i]"]=-1;
                }
                if(($this->items["l_node][$i]"]==$current_node)) {//his parent use left point
                    $this->items["l_node][$i]"]=-1;
                    $this->count=$this->count-2;
                }
                $this->m_l_r_list($i);
                exit;
            }//if his right child node have been visite,up to his parent node
            
            
        }
        if(($this->items["f_node][$i]"]!=0)&&($this->items["l_node][$i]"]==0)&&($this->items["r_node][$i]"]==0))
        {//if this node haven''t child node,print it and up to his parent
         //node his parent left or right child have been visited
            $current_node=$this->items["d_id][$i]"];
            $j=$i;
            $i=$this->find($this->items["f_node][$i]"]);//up to parent
            //echo $this->items["l_node][$i]"];
            if(($this->items["r_node][$i]"]==$current_node)) {//his parent use right point
                echo "<table><tr><td>";
                for ($k=0;$k<$this->count;$k++) { echo " ";}
                echo "<a href=\"main.php?d_id=".$this->items["d_id][$j]"]."\" target=\"rightFrame\">".$this->items["node_value][$j]"]."</a>";
                //echo $this->items["node_value][$j]"];
                echo " <a href=addnode.php?id=".$this->items["d_id][$j]"]." target=\"rightFrame\"><font size=2 color=red>Add</font></a>";
                echo " <a href=delnode.php?id=".$this->items["d_id][$j]"]."><font size=2 color=red>Del</font></a>";
                echo "</td></tr></table>";
                echo "</div>";
                $this->items["r_node][$i]"]=-1;
                    
            }
            if(($this->items["l_node][$i]"]==$current_node)) {//his parent use left point
                
                echo "<table><tr><td>";
                for ($k=0;$k<$this->count;$k++) { echo " ";}
                echo "<a href=\"main.php?d_id=".$this->items["d_id][$j]"]."\" target=\"rightFrame\">".$this->items["node_value][$j]"]."</a>";
                //echo $this->items["node_value][$j]"];
                echo " <a href=addnode.php?id=".$this->items["d_id][$j]"]." target=\"rightFrame\"><font size=2 color=red>Add</font></a>";
                echo " <a href=delnode.php?id=".$this->items["d_id][$j]"]."><font size=2 color=red>Del</font></a>";
                echo "</td></tr></table>";
                echo "</div>";
                $this->items["l_node][$i]"]=-1;
                $this->count=$this->count-2;
                
            }
            $this->m_l_r_list($i);
            exit;
        }
    
    }
    
    function pages_0($d_id){//
        include("conn_db.php");
        $Sql_Query="select * from node_page where d_id=$d_id";
        $Query_Db=mysql_query($Sql_Query,$Connect);
        $MyPage=mysql_fetch_array($Query_Db);            
        include("conn_close.php");
        if($MyPage["d_page"]!='''')
            {
                return $MyPage["d_page"];
            }    
        else return "init.php";
        }
    function pages($d_id){//
        include("conn_db.php");
        $Sql_Query="select * from node_page where d_id=$d_id";
        $Query_Db=mysql_query($Sql_Query,$Connect);
        $MyPage=mysql_fetch_array($Query_Db);            
        include("conn_close.php");
        return $MyPage["d_page"];
        }    
        
    function showinfo_0($status){//
        include("conn_db.php");
        $Sql_Query="select * from department order by d_id";
        $Query_Db=mysql_query($Sql_Query,$Connect);
        $info_all=mysql_num_rows($Query_Db);
        $this->items["info_all"]=$info_all;
        if($status==1) {//when status=1 show all data gets from database
            $MNums=$info_all;
            }
        if($status==0) {//when status=0 show 6 messages gets from database
            $MNums=6;
            }
        for($i=1;$i<=$MNums;$i++)
            {
            $Messages=mysql_fetch_array($Query_Db);
            $this->items["d_id][$i]"]=$Messages["d_id"];
            $this->items["f_node][$i]"]=$Messages["f_node"];
            $this->items["node_value][$i]"]=$Messages["node_value"];
            $this->items["l_node][$i]"]=$Messages["l_node"];
            $this->items["r_node][$i]"]=$Messages["r_node"];
            }
        include("conn_close.php");
        }    
}

将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
上一篇文章:写不下了
下一篇文章:php.ini 配置详细选项
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· MySQL数据库技术(29)
· win2000server IIS和tom..
· 用PHP制作静态网站的模板..
· 埃里克率Google高层倾巢..
· 看人家用使用InstallShi..
· 在linux上用ASP
· SSI使用详解(一)
· 李开复称Google虚拟图书..
· 榕树下4000万卖身传媒集..
· Photoshop简单制作xhtml..
· 贡献自己的推广方式 电子..
· 使用SQL Server 7.0建立..
· 用InstallShield9 进行A..
· eBay惧怕Google 欲与雅虎..
· 全民博客时代悄然到来 草..
· FW中的动画输出的一个小..
相关文章
· 无限级别菜单的实现
· 无限级别菜单的实现(其实还..
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号