国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 桐乡市| 柳林县| 尉犁县| 磴口县| 清苑县| 子长县| 鲁甸县| 灵山县| 淮南市| 玛多县| 新丰县| 旬阳县| 镇沅| 深州市| 无极县| 鄂托克旗| 高淳县| 渭南市| 宿州市| 瑞安市| 房产| 临沂市| 陇西县| 望江县| 汾西县| 临澧县| 额敏县| 台东县| 北川| 大理市| 阜康市| 富顺县| 罗山县| 宁安市| 榆社县| 自治县| 淮南市| 霞浦县| 广昌县| 新郑市| 渑池县|