网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > PHP > 正文
用php理论上实现真正意义的无限级别菜单
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/12/06
下载{$ArticleTitle}原创论文样式

  很久没用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=/uploadfile/201212/6/A1132953283.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=/uploadfile/201212/6/A1132953283.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=/uploadfile/201212/6/A1132953283.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");
     }  
}

(责任编辑:admin)

  • 下一篇资讯: PHP eval加密的破解方法
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号