當前位置:首頁 » 編程語言 » 無限級分類php

無限級分類php

發布時間: 2023-03-07 01:08:35

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');

顯示樹結構

functionprintTree($data,$level=0){foreach($dataas$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);
}
}
}

使用遞歸的方式獲取無限極分類數組

functiongetNodeTree(&$list,&$tree,$pid=0){foreach($listas$key=>$value){if($pid==$value['pid']){
$tree[$value['id']]=$value;unset($list[$key]);
getNodeTree($list,$tree[$value['id']]['children'],$value['id']);
}
}
}

使用引用-無限極分類

functioncreateNodeTree(&$list,&$tree){foreach($listas$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遞歸無限極分類怎麼弄

給個函數你,調用get_category()就是一個數組格式的結果
function get_category($parent_id=0){
$arr=array();
$sql = "select * from category where parent_id=$parent_id";//查詢子級數據
$result = array(a_object,b_object,,,)=sql_query($sql);//查詢結果一個數組或列表格式,自己完善。
if($result){
foreach($result as $re){//循環數組
if(get_category($re.id))//如果子級不為空
$re['child'] = get_category($re.id);
$arr[] = $re;
}
return $arr;
}

❸ 關於PHP無限極分類

functiongenTree5($items){
foreach($itemsas$item)
$items[$item['pid']]['son'][$item['id']]=&$items[$item['id']];
returnisset($items[0]['son'])?$items[0]['son']:array();
}

超級爽的函數,格式可能不一樣,但肯定有用,樹狀結構的輸出

❹ 如何使用PHP實現無限級分類

你還在用浪費時間又浪費內存的遞歸遍歷無限極分類嗎,看了該篇文章,我覺得你應該換換了。
這是我在OSChina上看到的一段非常精簡的PHP無限極分類生成樹方法,巧在引用,整理分享了。

復制代碼代碼如下:

function generateTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = &$items[$item['id']];
}else{
$tree[] = &$items[$item['id']];
}
}
return $tree;
}
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
4 => array('id' => 4, 'pid' => 3, 'name' => '長豐縣'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),
);
print_r(generateTree($items));

可以看到下面列印的結果:

復制代碼代碼如下:

Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[name] => 安徽省
[son] => Array
(
[0] => Array
(
[id] => 3
[pid] => 1
[name] => 合肥市
[son] => Array
(
[0] => Array
(
[id] => 4
[pid] => 3
[name] => 長豐縣
)

)

)

[1] => Array
(
[id] => 5
[pid] => 1
[name] => 安慶市
)

)

)

[1] => Array
(
[id] => 2
[pid] => 0
[name] => 浙江省
)

)

上面生成樹方法還可以精簡到5行:

復制代碼代碼如下:

function generateTree($items){
foreach($items as $item)
$items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
return isset($items[0]['son']) ? $items[0]['son'] : array();
}

上面這種無限極分類數據樹形結構化的方法值得借鑒。但是我覺得這段代碼實際用途並不明顯啊,你想取出格式化的樹形數據還是要遞歸啊:

復制代碼代碼如下:

/**
* 如何取數據格式化的樹形數據
*/
$tree = generateTree($items);
function getTreeData($tree){
foreach($tree as $t){
echo $t['name'].'<br>';
if(isset($t['son'])){
getTreeData($t['son']);
}
}
}
getTreeData($tree);

❺ php 幾種常用的遞歸 無限極分類

/**
*遞歸實現無限極分類
*@param$array分類數據
*@param$pid父ID
*@param$level分類級別
*@return$list分好類的數組直接遍歷即可$level可以用來遍歷縮進
*/

functiongetTree($array,$pid=0,$level=0){

//聲明靜態數組,避免遞歸調用時,多次聲明導致數組覆蓋
static$list=[];foreach($arrayas$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。資料庫)

字面理解無限分類:
一級分類 -> 二級分類 -> 三級分類...........
1級下面有多個2級.
2級下面有多個3級.
........

資料庫的設計:
表名:table_categories
欄位:
cid [主鍵]
name 分類名
parentid:上一級cid.如果是一級分類.該欄位數據等於0;

❼ 什麼是 無限極分類(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

熱點內容
linuxip設置命令 發布:2024-05-21 22:52:56 瀏覽:851
aspnetfile上傳 發布:2024-05-21 22:28:58 瀏覽:671
華為nm存儲卡卡刷 發布:2024-05-21 22:25:23 瀏覽:601
sql注入過程 發布:2024-05-21 22:20:07 瀏覽:949
c並行編程 發布:2024-05-21 22:10:00 瀏覽:150
愛比較伺服器怎麼開 發布:2024-05-21 22:00:42 瀏覽:668
java代碼格式 發布:2024-05-21 21:56:09 瀏覽:36
吃奶演算法 發布:2024-05-21 21:51:07 瀏覽:143
壓縮機熱泵 發布:2024-05-21 21:51:04 瀏覽:926
安卓網頁源碼在哪裡 發布:2024-05-21 21:46:56 瀏覽:895