国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php菜單/評論數據遞歸分級算法的實現方法

2024-05-05 00:10:42
字體:
來源:轉載
供稿:網友

在開發過程中經常會遇到分級場景,如菜單分級、評論、商品類型分級等;在同一張mysql數據表中可能設計單表結構,如同如下數據:

 $menuList = [  [ 'id' => 1,'parent_id' => 0, 'name' => '節點1'],  [ 'id' => 2,'parent_id' => 1, 'name' => '節點1-1'],  [ 'id' => 3,'parent_id' => 0, 'name' => '節點2'],  [ 'id' => 4,'parent_id' => 3, 'name' => '節點2-1'],  [ 'id' => 5,'parent_id' => 2, 'name' => '節點1-1-1'],  [ 'id' => 6,'parent_id' => 1, 'name' => '節點1-2'], ];

這時候在處理展示過程就需要將上面的結構轉換為更加直觀的數據結構, 形如:

$treeList = [ [ children: [  children: [] ] ] [, children: [  children: [] ] ]];

算法代碼如下:

<?phpclass Menu{ /**  * 遞歸循環菜單列表, 轉化為菜單樹  * @param $treeList 菜單樹列表  * @param $menuList 菜單列表  * @return bool  */ public function getMenuTree(&$treeList, $menuList) {  // 初始化頂級父節點  if (! count($treeList)) {   foreach($menuList as $index => $menu) {    if ($menu['parent_id'] == 0) {     $treeList[] = $menu;     unset($menuList[$index]);    }   }  }  // 遞歸查找子節點  foreach ($treeList as &$tree) {   foreach ($menuList as $index => $menu) {    if (empty($tree['children'])) {     $tree['children'] = [];    }    if ($menu['parent_id'] == $tree['id']) {     $tree['children'][] = $menu;     unset($menuList[$index]);    }   }   if (! empty($tree['children'])) {    $this->getMenuTree($tree['children'], $menuList);   } else {    // 遞歸臨界點    return false;   }  } }}$menuList = [ [ 'id' => 1,'parent_id' => 0, 'name' => '節點1'], [ 'id' => 2,'parent_id' => 1, 'name' => '節點1-1'], [ 'id' => 3,'parent_id' => 0, 'name' => '節點2'], [ 'id' => 4,'parent_id' => 3, 'name' => '節點2-1'], [ 'id' => 5,'parent_id' => 2, 'name' => '節點1-1-1'], [ 'id' => 6,'parent_id' => 1, 'name' => '節點1-2'],];$treeList = [];(new Menu)->getMenuTree($treeList, $menuList);print_r($treeList);

happy coding!

每一個不曾起舞的日子,都是對生命的辜負 ^-^

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 定襄县| 滨州市| 榆社县| 乐安县| 吉木乃县| 江城| 车致| 自治县| 冷水江市| 夹江县| 石阡县| 罗城| 文安县| 商水县| 江门市| 金沙县| 确山县| 北京市| 南江县| 栾城县| 江华| 遂宁市| 宝清县| 乌兰浩特市| 精河县| 银川市| 温州市| 三原县| 上思县| 科技| 阿坝县| 高密市| 乐业县| 铜梁县| 满城县| 盐边县| 湖州市| 南溪县| 霍林郭勒市| 桃园市| 台东市|