本文目錄一覽:
php如何添加無限的一級到N級導航
數據庫這麼建就好了
id | belongid | name | img
1 | 0 | 名字A | url //A為根,0代表根級別
2 | 1 | 名字B | url //B為A的分支
3 | 1 | 名字C | url //C為A的分支
4 | 2 | 名字D | url //D為B的分支
獲取get belongid,然後belongid為空或者為0的時候顯示數據庫belongid為0的人,點擊任何一個人,進入一個子頁面belongid都為被點擊的這個人的id,在哪個belongid寫入數據庫的信息,那麼,添加的這個人就belongid=GET[“belongid”],這裡說的是添加
下面來講講提取數據,為了方便我們新加一個字段,表明當前用戶在第幾級,tmp字段,你也可以生成緩存表或緩存文件,先select 出 tmp=0的,然後tmp=1的,直到取到最大的一級,然後tmp=1級的belongid找0級uid的,這樣子依次就可以獲得所有用戶樹形關係了
php 幾種常用的遞歸 無限極分類
/**
* 遞歸實現無限極分類
* @param $array 分類數據
* @param $pid 父ID
* @param $level 分類級別
* @return $list 分好類的數組 直接遍歷即可 $level可以用來遍歷縮進
*/
function getTree($array, $pid =0, $level = 0){
//聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋
static $list = []; foreach ($array as $key = $value){ //第一次遍歷,找到父節點為根節點的節點 也就是pid=0的節點
if ($value[‘pid’] == $pid){ //父節點為根節點的節點,級別為0,也就是第一級
$value[‘level’] = $level; //把數組放到list中
$list[] = $value; //把這個節點從數組中移除,減少後續遞歸消耗
unset($array[$key]); //開始遞歸,查找父ID為該節點ID的節點,級別則為原級別+1
getTree($array, $value[‘id’], $level+1);
}
}
php 如何一個表實現無極分類
在表中設一個反映歸屬的字段就行了
ID NAME SID
1 中國 0 表示這就是最高級,他不歸屬於任何ID
2 中南 1 表示他歸屬於ID:1的中國
3 華北 1 同上
4 湖南 2 表示他歸屬與ID為2的中南
5 長沙 4 表示他歸屬與ID為4的湖南
6 天心區 5 表示他歸屬與ID為5的長沙
當然你還可以加一個字段表示他是第幾級比如中國是1級,中南是2級,湖南是3級以此類推
php無限極分類實現的方法?
初始化的數據
//初始化原始數據(id=編號,name=顯示名稱,pid=父級目錄id,sort=排序順序)$data[1] = array(‘id’=’1′,’name’=’一級目錄A’,’pid’=’0′,’sort’=’1′);
$data[2] = array(‘id’=’2′,’name’=’一級目錄B’,’pid’=’0′,’sort’=’2′);
$data[3] = array(‘id’=’3′,’name’=’一級目錄C’,’pid’=’0′,’sort’=’3′);
$data[4] = array(‘id’=’4′,’name’=’一級目錄D’,’pid’=’0′,’sort’=’4′);
$data[5] = array(‘id’=’5′,’name’=’二級目錄A-1′,’pid’=’1′,’sort’=’1’);
$data[6] = array(‘id’=’6′,’name’=’二級目錄A-2′,’pid’=’1′,’sort’=’2’);
$data[7] = array(‘id’=’7′,’name’=’二級目錄A-3′,’pid’=’1′,’sort’=’3’);
$data[8] = array(‘id’=’8′,’name’=’二級目錄B-1′,’pid’=’2′,’sort’=’1’);
$data[9] = array(‘id’=’9′,’name’=’二級目錄B-2′,’pid’=’2′,’sort’=’2’);
$data[10] = array(‘id’=’10’,’name’=’二級目錄B-3′,’pid’=’2′,’sort’=’3′);
$data[11] = array(‘id’=’11’,’name’=’二級目錄C-1′,’pid’=’3′,’sort’=’2′);
$data[12] = array(‘id’=’12’,’name’=’二級目錄D-1′,’pid’=’4′,’sort’=’1′);
$data[13] = array(‘id’=’13’,’name’=’二級目錄D-2′,’pid’=’4′,’sort’=’2′);
$data[14] = array(‘id’=’14’,’name’=’三級目錄A-2-1′,’pid’=’6′,’sort’=’1′);
$data[15] = array(‘id’=’15’,’name’=’三級目錄A-2-2′,’pid’=’6′,’sort’=’2′);
$data[16] = array(‘id’=’16’,’name’=’三級目錄C-1-1′,’pid’=’11’,’sort’=’1′);
$data[17] = array(‘id’=’17’,’name’=’三級目錄B-2-1′,’pid’=’9′,’sort’=’2′);
顯示樹結構
function printTree($data,$level=0){ foreach($data as $key=$value){ for($i=0;$i=$level;$i++){ echo ’emsp;emsp;’;
} echo $value[‘name’]; echo ‘br’; if(!empty($value[‘children’])){
printTree($value[‘children’],$level+1);
}
}
}
使用遞歸的方式獲取無限極分類數組
function getNodeTree($list,$tree,$pid=0){ foreach($list as $key=$value){ if($pid == $value[‘pid’]){
$tree[$value[‘id’]]=$value; unset($list[$key]);
getNodeTree($list,$tree[$value[‘id’]][‘children’],$value[‘id’]);
}
}
}
使用引用-無限極分類
function createNodeTree($list,$tree){ foreach($list as $key=$node){ if(isset($list[$node[‘pid’]])){
$list[$node[‘pid’]][‘children’][] = $list[$key];
}else{
$tree[] = $list[$node[‘id’]];
}
}
}
調用
//遞歸-無限極分類調用getNodeTree($data,$tree);
printTree($tree);//使用引用-無限極分類調用createNodeTree($data,$tree);
printTree($tree);
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/271593.html