本文目錄一覽:
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);
關於PHP無限極分類
function genTree5($items) {
foreach ($items as $item)
$items[$item[‘pid’]][‘son’][$item[‘id’]] = $items[$item[‘id’]];
return isset($items[0][‘son’]) ? $items[0][‘son’] : array();
}
超級爽的函數,格式可能不一樣,但肯定有用,樹狀結構的輸出
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。資料庫)
那是一種關聯關係….sql 里可以叫”自連接” 假設:表 Category 有以下欄位: Id(PK),Cate_Name(varchar),Cate_Parent_Id(int) 數據: Id(編號ID) Cate_Name(類別名稱) Cate_Parent_Id(父級Id) 1 BaseCategory 0 2 News 1 3 Article 1 4 Story 3 說明: Id 為 1 的基類別(沒有父級類別) News,Article 為 基類別下的子分類 Story 為 Article 下的子分類 層次關係: 0 – 2 – 3 – 4 這樣就可以簡單實現無限分類的資料庫的設計了 使用: 給出Id 獲取到它的父類別和所有子類別 Function getParentCategory($Id){ $sql = “select * from Category where Id = (select Cate_Parent_Id from Category where Id = $Id)”; $rs = mysql_query($sql,$conn); …… //省事期間,給出偽代碼吧 if(記錄不存在 或者 $Id = 1){ return false; //無父級或不存在 }else{ return 查詢出的父級數據數組; } } Function getChildCategory($PId){ $sql = “select * from Category where Cate_Parent_Id = $PId”; 存在則返回數據數組 否則返回false } 上面只是簡單說明下大致思路.. php,J2ee的我沒手寫過,都是通過支持ORM的MVC框架去配置出來的. asp的倒是寫過,需要的話,可以發你 只要邏輯關係整清楚了,就不難了…至於頁面展示,可以用JS或者AJAX
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/236862.html