Mat*_*att 4 php mysql arrays menu hierarchy
所以最终菜单看起来像这样:
Item B
Item B-1
Item B-1-2
Item B-1-1
Item A
SubItem A-1
SubItem A-2
Item C
Run Code Online (Sandbox Code Playgroud)
基于以下DB记录:
id menu_title parent_menu_id menu_level weight
1 Item A 0 1 1
2 Item B 0 1 0
3 Item C 0 1 2
4 SubItem A-2 1 2 1
5 Item B-1 2 2 0
6 Item B-1-1 5 3 1
7 SubItem A-1 1 2 0
8 Item B-1-2 5 3 0
Run Code Online (Sandbox Code Playgroud)
我该怎么去展示?我的猜测是它将涉及将所有项目存储到一个多维数组中,然后以某种方式循环遍历它...
在关系数据库(不包括Oracle,其中有运营商START WITH/CONNECT BY来处理这个)中,分层数据有点烦人.基本上有两种模型:邻接列表和嵌套集.
你选择了邻接集,这也是我通常也会做的.尽管可以在单个查询中以正确的顺序检索嵌套集模型,但它比嵌套集模型更容易更改.邻接列表不能.您需要构建一个中间数据结构(树),然后将其转换为列表.
我会做什么(事实上最近做过)是:
你建立这样的东西:
$menu = array(
array(
'name' => 'Home',
'url' => '/home',
),
array(
'name' => 'Account',
'url' => '/account',
'children' => array(
'name' => 'Profile',
'url' => '/account/profile',
),
),
// etc
);
Run Code Online (Sandbox Code Playgroud)
并将其转换为:
<ul class="menu">;
<li><a href="/">Home</a></li>
<li><a href="/account">Account Services</a>
<ul>
<li><a href="/account/profile">Profile</a></li>
...
Run Code Online (Sandbox Code Playgroud)
用于生成菜单数组的PHP相当简单,但有点难以解决.您使用递归树行走函数来构建HTML嵌套列表标记,但将其实现作为读者的练习.:)
| 归档时间: |
|
| 查看次数: |
20861 次 |
| 最近记录: |