当前位置:编程学习 > php >>

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

答案:很久没用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=http://old.zzzyk.com/"c.gif\" onclick=outliner() style=\"cursor:hand\" child=\"".$i."ALL\" NAME=\"NAME_".$i."ALL\">";
            echo "<a href=>            echo " <a href=>            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=http://old.zzzyk.com/"c.gif\" onclick=outliner() style=\"cursor:hand\" child=\"".$i."ALL\" NAME=\"NAME_".$i."ALL\">";
                echo "<a href=>                //echo $this->items["node_value][$i]"];
                echo " <a href=>                echo " <a href=delnode.php?id=".$this->items["d_id][$i]"]."><font size=2 color=red>Del</font></a>

上一个:php.ini 配置详细选项
下一个:写不下了

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,