gpt4 book ai didi

php - mysql/php 中的多级菜单

转载 作者:行者123 更新时间:2023-11-29 02:49:48 26 4
gpt4 key购买 nike

我正在尝试编写一个 php 代码来为我获取一个多级菜单,具有无限的深度。我希望只用一个查询和一个循环就可以做到这一点。这是我所拥有的:我有一个包含以下列的 menu_items 表:

id 
categories_id (overall menu id)
title (Text title)
link (Link)
ord (the order within the category itself)
parent (Parent item, which is basically another item, different from categories_id)
depth (Menu level. For whatever reason, I think it's going to help me to know the depth of every particular item)

所有菜单项都通过 categories_id 链接到特定菜单,并且所有菜单项都通过“parent”链接到它们的父项,其中顶级项的父项为 0。

现在,我需要 mysql 以这样一种方式返回整个项目列表(在相同的 categories_id 下),一次循环就能够将它们组织在一个漂亮的多维数组中。

我该怎么做?我想到的一种方法是,如果我可以让 MySQL 以这样一种方式对项目进行排序,即每个项目都由它的所有子项处理。

例如:如果我有这个结构:

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8

其中项目 1、7 和 8 是顶级空项目,项目 2 有三个 child ,子项目 4 有项目 5 作为其 child

我需要 mysql 以这种方式对上述项目进行排序:第 1 项,然后是第 2 项,然后由于第 2 项有子项,它应该输出第 3 项和第 4 项,因为 4 有一个 child ,它应该从第 5 项开始,然后返回到第 6 项......等等......

有什么办法可以让MySQL这样排序吗?或者,我可以通过其他方式实现吗?

抱歉,如果我的问题有点令人困惑。

最佳答案

如果您想用一个查询加载所有内容,这是有道理的,因为菜单中很可能不会有数千个项目,那么您可以简化您的任务并使用 PHP 做更多事情,而不是使 SQL 查询过于复杂。

因此,首先您只需使用最简单的查询加载所有内容:

$items = query('SELECT * FROM `menu_items` WHERE categories_id = ? ORDER BY `ord` asc');

这样,将所有项目划分为子菜单后,顺序将得以保留。然后你只需要一个循环来构建菜单结构。

$itemsById = [];
$children = [];
foreach ($items as $item) {
$itemsById[$item['id']] = $item;
$children[$item['parent']][] = $item['id'];
}

并且您可以从 $children[0] 开始递归打印它。

关于php - mysql/php 中的多级菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com