顯示廣告
隱藏 ✕
看板 Knuckles_note
作者 Knuckles(阿德)
標題 [轉錄] 做好了讓板主及板友建立文章分類目錄的功能
時間 2010年01月28日 Thu. AM 03:27:16


※ 本文轉錄自 DISP_BBS 看板

看板 DISP_BBS
作者 Knuckles(阿德)
標題 做好了讓板主及板友建立文章分類目錄的功能
時間 2009年11月16日 Mon. PM 03:36:08


終於弄好了...
現在板主可以在「文章分類」中編輯目錄
包括建立、修改名稱、以及刪除目錄

而板友除了可以建立目錄外
也可以修改及刪除自己建立的目錄

在做刪除目錄功能的時候遇到一點困難
因為目錄底下還有其他的目錄,其他的目錄底下又有目錄
得要把目錄下面的東西一併刪除才行
也就是要刪除一整個樹狀結構

要刪除一整個Tree
最直覺得方法就是用遞迴(Recursive)了
像這樣:

function del_menu($menu_id){
    刪除$menu_id這個目錄;
    將歸類在$menu_id這個目錄下的文章改為未分類;
    while($menu_id這個目錄下有其他目錄){
        $id = 那個目錄的id;
        del_menu($id); // recursive
    }
}
       
不過遞迴是很耗資源的,試了一下
果然整個網頁就當在那裡,過了一會後出現伺服器無回應...
雖然重新整理後的確是有將整個樹狀結構的目錄刪掉了
可是會讓網頁當掉就不行

還好以前有學過用stack及迴圈來模擬遞迴的方法
找了一下,好在PHP的Array也有提供stack的用法
array_push() array_pop()
stack就是一個先進後出的容器
使用push可以將一個新的值丟進去
使用pop可以將最後一個丟進去的值取出來

於是就可以將遞迴改寫成迴圈了:

    $stack = array($menu_id);
    while($stack裡有東西){
        $mi = array_pop($stack);
        刪除$mi這個目錄;
        將歸類在$mi這個目錄下的文章改為未分類;
        while($mi這個目錄下有其他目錄){
            $id = 那個目錄的id;
            array_push($stack,$id);
        }
    }

試了一下瞬間就把一整個目錄砍了,改成這果然值得 XD

以前修過資料結構還是有點用的 ^^||
--
※ 來源: DISP BBS (http://disp.twbbs.org)
※ 作者: Knuckles  來自: 114.43.114.5  時間: 2009-11-16 15:36:08
※ ott:轉錄至看板 ott 來自:118.166.8.209 時間:2010-01-07 05:27:35

--
※ 來源: DISP BBS (http://disp.twbbs.org)
※ 作者: Knuckles  來自: 114.43.113.83  時間: 2010-01-28 03:27:16
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 1261 
※ 文章分類: 網頁程式 PHP
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇
看板名稱: 確定(Enter) 取消(Esc) 搜尋(Space)
查詢帳號: 確定(Enter) 取消(Esc) 搜尋(Space)
搜尋: m)m文 b)進板 c)未分類 a)作者 /)標題 q)取消?[q]

搜尋 送出(Enter) 取消(Esc)

回覆文章至: f)看板 m)作者信箱 b)兩者皆是 q)取消?[f]
要引用原文嗎? y)引用原文 n)不引用 a)全部回覆 r)複製原文 q)取消?[y]
轉錄本文章於看板: 1)使用連結 2)使用複製 q)取消 ?[1]
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
轉寄至站內信箱於使用者: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc)
修改文章標題為: 確定(Enter) 取消(Esc) 全部(a)

確定要刪除這篇文章?(可按大U救回) 確定(Enter) 取消(Esc)

刪除理由:

確定(Enter) 取消(Esc)
加到這個分類: 確定(Enter) 下一層(→) 回上層(←) 取消(Esc)
你覺得這篇文章: 1)真讚 2)真瞎 q)取消?[1] (再選一次即可收回)
你覺得這篇文章: 1)值得推薦 2)表示反對 3)單純註解 q)取消?[3]
guest
預覽(Enter) 取消(Esc)
上傳圖片
按ctrl+Enter可輸入下一行。
guest
確定要送出? 確定(Enter) 取消(Esc) 繼續(e)
搜尋: 送出(Enter) 取消(Esc)

▏▎▍▌▋▊▉ 請按任意鍵繼續