帖幾個
php的 無限分類實現想法~<--google_ad_client = "pub-6912338070246884";google_alternate_color = "ffffff";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text";//2007-06-15: www.techyou.cngoogle_ad_channel = "5642791638";google_color_border = "ffffff";google_color_bg = "ffffff";google_color_link = "000000";google_color_text = "000000";google_color_url = "008000";//-->
#qb)g0@"]g'r2/x01、做**的一般都會遇到處理分類的問題, 偶來帖幾個處理無限分類的例子
ap;l,cr#e?m0資料庫的結構很簡單:
phpchina 開源社群門戶5r#cs9jz1a2s-u
id, fatcher_id, name, ......
phpchina 開源社群門戶3vy ~ @lx0 類別1.1
phpchina 開源社群門戶:c*`-qj:mi
類別1.1.1
$^,p%fb5t-etd1w0 類別1.2
phpchina 開源社群門戶sp l/_`.v
類別2
)h? ^fd3}3k0 類別2.1
phpchina 開源社群門戶b7q6q~fdete?
類別3
s(ls o2eqy!s0 類別3.1
8hr'y$sy)z0 類別3.2
hkz5fk$_0......
yzr(ls/"i0為了生成這樣的目錄結構,程式遞迴一次就查詢一次資料庫,在您任何涉及分類的地方(翻頁,查詢....),資料庫都會悲壯地操作硬碟....阿門~so~跳一下吧...
phpchina 開源社群門戶vu&w n'w;`;x u
2.查詢一次資料庫,遞迴陣列生成以上目錄結構
ie q�w)y;f`0帖乙個大致的思路
phpchina 開源社群門戶qq0p6nea c i2f
function selectlist(&$data, $rootid = 0')
/xr o8`y b8s0
phpchina 開源社群門戶/r/#i u9f�u&o
} ou&lb7g2hr�qy#
} xj./-n%` zx1pf0這種強度的遞迴一般的**系夠用啦~不過碰到bt點的,有幾k甚至上w的分類,遞迴一遍可能要百毫秒以上,在考慮併發的情況下....呵呵~我們再跳一下吧
phpchina 開源社群門戶:d)n` j}le
3.查詢一次資料庫,非遞迴生成目錄結構
3hq6amrp0這一步,程式的技巧來了~只對結果遍歷一次就能生成上面那樣的目錄結構,想要把它格式化成網頁的顯示樣式就很方便咯~下面的系別人寫的,偶試過完全可行
&/#z4p"d v0function getarray($rootid = 0)
phpchina 開源社群門戶?�[
phpchina 開源社群門戶_*i7xoo)p
$upid = $rootid; //上個節點指向的分類父id
phpchina 開源社群門戶cqr-mq
for($cnt = count($data); $i < $cnt;) //歷遍整個分類陣列
q3n(t(uzvy5z0 �v)e}
$j++;
phpchina 開源社群門戶pscs7ld4ii
} s/n:tz9`/|_*p;bm0 }
6f"y} 0 else
uv6s1bo:g0
$tmp[$data[$i]['id']] = &$tmp[$upid]['child'][$j]; //儲存該節點id在output中的位置
?.z ap| b0 }
4n.q? e1a)dq@lb8q0 $i++;
phpchina 開源社群門戶2`zxh7n$q0@
$j++;
phpchina 開源社群門戶+a&yz,a"y,dhj
} phpchina 開源社群門戶j,y,az9e8e@ny
} phpchina 開源社群門戶-t#/ag~'wb
$upid = $data[$i]['uid'];
phpchina 開源社群門戶zbsfn nx
} +cy5b'i9a%l t5r.y c0 return $output;
]&vp&]d
%^3kt;`"p0程式看著好累人啊~這段
**的效率比上一段快了十幾倍呢,強度系夠大了...
phpchina 開源社群門戶i6[;}wdre�o+q-^
不過....90%的**用這樣的**都浪費啦~偶遇到過的**分類一般都在四級以下,那麼,還能再優化一下麼?........再....再跳一下吧..
phpchina 開源社群門戶al6c�vf,i
4.從資料庫入手~
7z9n.f+es@#o9y0稍微改動一下資料庫的結構,加乙個layer的冗餘字段,這個是db desing高手想出來的,偶把他帖出來而已
phpchina 開源社群門戶+asz+ue s6f wc
id name father_id layer
phpchina 開源社群門戶7e `k8w|i0w
1 總類別 0 000000
4h"q6`w"}#zi02 類別1 1 010000
#~r#n _$[�$ys0~
5 類別2 1 020000
~o�q ci6b/zu?u06 類別2.1 5 020100
phpchina 開源社群門戶#kl/urg+rsox%m&x
7 類別3 1 030000
phpchina 開源社群門戶x;r y q.n01 總類別 0 000000
phpchina 開源社群門戶5spga!{&|
2 類別1 1 010000
y`3i|;j)h4t03 類別1.1 2 010100
phpchina 開源社群門戶;n!y;z;px j'ko
10 類別1.1.1 3 010101
&o'e$w hu:zg4[7z7k04 類別1.2 2 010200
phpchina 開源社群門戶j7b6z i/y%a
5 類別2 1 020000
g$o]"f"z s6y!m9|)y3z?06 類別2.1 5 020100
:ulv jq2l07 類別3 1 030000
phpchina 開源社群門戶lexsz5t/g/k
8 類別3.1 7 030100
^�i ylod�c%~)p09 類別3.2 7 030200
phpchina 開源社群門戶oj;g#en4l n
看見了麼~一次查詢連目錄結構都生成好咯~,這樣程式就輕鬆很多了,只是多了維護layer欄位的
工作,這個例程中layer欄位每一級能處理99個分類,如果有bt的應用,改大些就行了,呵呵,先分析你的需求吧
(f*v�i#dk e|0ok~over~閃人~
php實現無限分類
access public param pid 節點的id param array 返回該節點的所有後代節點 public function list cate pid 0 access private param arr array 要遍歷的陣列 param pid 節點的pid,預設為0,表示從...
PHP實現無限分類
無限分類 遞迴無限級分類是一種設計技巧,在開發中經常使用,例如 目錄 部門結構 文章分類。筆者覺得它在對於設計表的層級結構上面發揮很大的作用,比如大家在一些平台上面,填寫邀請人,它就是一種上下級的關係,上級會有多個下級,下級又會有自己的分支,大多數都是利用遞迴的思想去實現。話不多說,首先來溫故一下遞...
PHP遞迴實現無限級分類
在一些複雜的系統中,要求對資訊欄目進行無限級的分類,以增強系統的靈活性。那麼php是如何實現無限級分類的呢?我們在本文中使用遞迴演算法並結合mysql資料表實現無限級分類。在一些複雜的系統中,要求對資訊欄目進行無限級的分類,以增強系統的靈活性。那麼php是如何實現無限級分類的呢?我們在本文中使用遞迴...