帖幾個PHP的無限分類實現想法 PHP 教程

2021-04-13 09:29:04 字數 4208 閱讀 2819

帖幾個

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是如何實現無限級分類的呢?我們在本文中使用遞迴...