<?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...