相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動到新位置)
- dirname(__FILE__)的含義和應(yīng)用說明
- thinkPHP5框架實(shí)現(xiàn)分頁查詢功能的方法示例
- PHP中單雙號與變量
- PHP獲得當(dāng)日零點(diǎn)時(shí)間戳的方法分析
- Laravel ORM對Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時(shí)進(jìn)度條顯示的實(shí)現(xiàn)
PHP無限極分類函數(shù)的實(shí)現(xiàn)方法詳解
本文實(shí)例講述了PHP無限極分類函數(shù)的實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
在開發(fā)程序的時(shí)候,有時(shí)候,我們需要獲取所有欄目(包括一級欄目、二級欄目、三級欄目等等),并按照父子關(guān)系形成樹型結(jié)構(gòu)??梢圆扇∈褂眠f歸或者通過引用方式(php中引用類似C或者C++中的指針,只不過換一種說法而已)。
通過引用方式實(shí)現(xiàn)無限極分類
思路:
1.即所有待處理的數(shù)據(jù)進(jìn)行包裝成下標(biāo)為主鍵id(pk)的數(shù)組,便于有pid獲取對應(yīng)的父欄目。
2.對包裝的數(shù)據(jù)進(jìn)行循環(huán),如果為根節(jié)點(diǎn),則將其引用添加到tree中,否則,將其引用添加到其父類的子元素中。這樣雖然tree中,只是添加了根節(jié)點(diǎn),但是每個(gè)根節(jié)點(diǎn)如果有子元素,其中包含了子元素的引用。故能形成樹型。
代碼如下
/** * 把返回的數(shù)據(jù)集轉(zhuǎn)換成Tree * @param array $list 要轉(zhuǎn)換的數(shù)據(jù)集 * @param string $pk 自增字段(欄目id) * @param string $pid parent標(biāo)記字段 * @return array * @author dqs <1696232133@qq.com> */ function make_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){ $tree=array(); $packData=array(); foreach ($list as $data) { $packData[$data[$pk]] = $data; } foreach ($packData as $key =>$val){ if($val[$pid]==$root){//代表跟節(jié)點(diǎn) $tree[]=& $packData[$key]; }else{ //找到其父類 $packData[$val[$pid]][$child][]=& $packData[$key]; } } return $tree; }