无限极分类中递归查找一个树结构
生活随笔
收集整理的這篇文章主要介紹了
无限极分类中递归查找一个树结构
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問題:設(shè)計(jì)公司的員工表,員工有不同級(jí)別,要求可通過一個(gè)員工查到其下屬的所有員工,也可查到其所屬的上級(jí)。
解決:遞歸實(shí)現(xiàn)無限分類思想,每一個(gè)員工存入其所屬的上級(jí)的id作為自己的pid,另外存入path,path包含自身id,方便顯示路徑。
遞歸的注意點(diǎn):
1.一定有一個(gè)判斷條件,否則遞歸就死循環(huán)了
2.每次的遞歸結(jié)果要保存起來,變量自增的實(shí)現(xiàn)三種方式:
function(&$bar):通過引用地址
global :通過設(shè)置為全局變量
static :設(shè)置為靜態(tài)變量
/*
|----副總王
|--------經(jīng)理趙
|------------組長劉
|----------------員工趙
|----------------員工房
|--------經(jīng)理光桿
*/
還是上邊的數(shù)據(jù),現(xiàn)在要查一個(gè)員工的所有上級(jí)
/*** 傳入員工的id,可以查找員工所屬的上級(jí)* @param array $data 數(shù)組代替數(shù)據(jù)庫中的數(shù)據(jù)* @param integer $id 要查找的員工的id* @param array &$result 結(jié)果數(shù)組,&保證變量常駐* @return 結(jié)果*/ function getLink($data, $id=0, &$result=array()){ foreach ($data as $key => $val) { if ($val['uid'] == $id) { $result[] = $val['name']; getLink($data, $val['pid'], $result); } } return $result; } $res = getLink($arr , 5); //查找員工房的上級(jí) foreach ($res as $key => $val) { echo $val." | "; } /* 員工房 | 組長劉 | 經(jīng)理趙 | 副總王 | 總監(jiān)張 | */注:也可用全路徑無限分類:數(shù)據(jù)中存了path,全路徑可通過concat(path,",",id)算出來。
優(yōu)點(diǎn):查詢快,比遞歸快
缺點(diǎn):增加,移動(dòng)分類時(shí)稍顯復(fù)雜
轉(zhuǎn)載于:https://www.cnblogs.com/KTblog/p/9025120.html
總結(jié)
以上是生活随笔為你收集整理的无限极分类中递归查找一个树结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何看待腾讯元宝对政府管理的影响?
- 下一篇: html5中高德、腾讯、百度 地图api