Php無限層級,並顯示層級數

2021-10-03 00:10:50 字數 2082 閱讀 5405

<?php 

// 這裡的arr是直接從資料庫取出的,僅作為測試資料

$arr = array(

array('id' => 1, 'name' => '一級選單a', 'pid' => 0),// pid 父級id

array('id' => 2, 'name' => '一級選單b', 'pid' => 0),

array('id' => 3, 'name' => '二級選單a', 'pid' => 1),

array('id' => 4, 'name' => '二級選單b', 'pid' => 1),

array('id' => 5, 'name' => '二級選單c', 'pid' => 2),

array('id' => 6, 'name' => '二級選單d', 'pid' => 2),

array('id' => 7, 'name' => '**選單a', 'pid' => 3),

array('id' => 8, 'name' => '**選單b', 'pid' => 3),

array('id' => 9, 'name' => '四級選單a', 'pid' => 8),

);/** 獲取所有子節點

* @param $data 所有節點陣列

* @param $id $pid 父級節點id

* @param $level 層級

* @return array

*/function gettree($data, $pid, $level = 0)

$list = $v;}}

return $list;

}/** 根據子節點獲取父節點id

* @param $data 所有節點陣列

* @param $id id 主鍵id

* @return array

*/function getparentid($data, $id)

}return $arr;

}$id = 8 ; // 對應的節點是: **選單b 對應的pid 是 3

$pid = 3; // 對應的節點是 二級選單a

$toparr = getparentid($arr, $id); // 節點為8的所有父節點 id: 1 3 8 這裡包含了自身,注意剔除

$level = count($toparr); // 節點所在的層級數

$menu = gettree($arr, $pid, $level-1);

if($pid)

$menu = array(['name' => '二級選單a' . '(' . ($level-1) . '級)', 'children' => $menu]);

$id = 2 ; // 對應的節點是: 一級選單b 對應的pid 是 0

$pid = 0; // 對應的節點是 0 為 一級節點 顯示所有節點,上面的$id用不到

$toparr = getparentid($arr, $id); //

$level = count($toparr); // 節點所在的層級數

$menu = gettree($arr, $pid, $level-1);

if($pid)

$menu = array(['name' => '二級選單a' . '(' . ($level-1) . '級)', 'children' => $menu]);

MySQL 無限層級資料表設計

需求 使用者a介紹b入會,b成為a的下線,b再發展c d等下線,c d也允許發展下線,不限制層級,但是每個人只允許有乙個上線 類似 傳銷 典型的樹結構 問題 快速查詢某人的所有上線 快速查詢某人的所有下線 快速為某人增加乙個下線 方案有以下四種,各自的定義和利弊請看 前輩的文件 一 鄰接表 依賴父節...

C 不用遞迴,獲取無限層級資料

物件屬性 public class reslist public listchild null public int parent public int rank 資料就是那種有父級id的那種 1 listreslist new list 新的資料 2 listalllist new list 原始...

SQL Server 儲存層級資料實現無限級分類

sql server 儲存層級資料實現無限級分類 由於資料庫儲存的資料都是以平面方式儲存,所以目前大部分論壇和其他程式都是用遞迴來展現層次資料的,如果分類的層次十分深的話那麼使用的遞迴次數相當可觀,對效能的影響也非常大。最近要做乙個分類資訊的平台就遇到這個問題了,那麼如何實現快速的展現分層資料呢?m...