• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    理論上實現真正意義的無限級別菜單

    發布: 2007-7-14 19:53 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 12次 | 進入軟件測試論壇討論

    領測軟件測試網 很久沒用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="/Files/BeyondPic/2005-12/19/0512190657505020.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="/Files/BeyondPic/2005-12/19/0512190657505020.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="/Files/BeyondPic/2005-12/19/0512190657505020.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");
            }    
    }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>