PHP 多级菜单

2023-12-26

我有一个这样的主题表:

id
title
parent_id
full_path

full_path用于递归查找父级。像这样:

+----+-----------+-----------+-----------+
| id | title     | full_path | parent_id |
+----+-----------+-----------+-----------+
| 40 | home      | 40        |         0 |
| 41 | myhome1   | 41        |         0 |
| 42 | ****      | 40-42     |        40 |
| 43 | *****     | 41-43     |        41 |
| 44 | ***       | 44        |         0 |
| 45 | ****      | 45        |         0 |
| 46 | *****     | 46        |         0 |
| 49 | ******    | 49        |         0 |
| 50 | **** **   | 40-42-50  |        42 |
| 51 | **** **   | 40-42-51  |        42 |
| 52 | **** **   | 40-42-52  |        42 |
| 53 | *******   | 40-53     |        40 |
| 54 | ****      | 40-54     |        40 |
| 55 | ***       | 41-55     |        41 |
| 56 | **** **** | 40-42-56  |        42 |
| 57 | *******   | 44-57     |        44 |
+----+-----------+-----------+-----------+

我如何获得这样的递归数组:

array
(
    40 => array
    (
        42 => array
        (
            50,51,52,etc.
        ),
        53,
        54
    )
    41 => array
    (
        43,
        55,
    ),
    44 => array
    (
        57,
    ),
    etc...
)

我可以用吗full_path用于创建多级菜单?


您可以使用下面的代码来执行此操作。请记住,这是有效的,因为您的主题数组将非常小,并且发生的递归将是最小的。不要在大型​​数组上使用此方法。

<?php
$query = "SELECT id, parent_id FROM subjects";
//execute with your prefered method, eg mysqli

$rows = array();
while($row = $result->fetch_array(MYSQLI_ASSOC))
{
  $rows[] = $row;
}

function getChildren($p) {
  global $rows;
  $r = array();
  foreach($rows as $row) {
    if ($row['parent_id']==$p) {
      $r[$row['id']] = getChildren($row['id']);
    }
  }
  return $r;
}

$final = getChildren(0);
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 多级菜单 的相关文章

  • << 和 += 有什么区别?

    我一直在尝试使用数组 发现自己在理解以下代码时遇到了困难 first array second array third array I initialized 3 empty arrays third array lt lt 1 2 3 4
  • Yii2:使用 Pjax POST 方法和分页在 Gridview 中搜索

    我是 yii2 的初学者 尝试在搜索按钮上使用 Pjax 来搜索 Gridview 中的字段 我已经使用 GET 方法完成此操作 但我想使用 POST 方法完成此操作 那么我该如何使用 Yii2 Pjax post 方法 和分页来做到这一点
  • 无法从 XML 获取数组字符串资源

    我的 XML 文件中有一个值列表 我想根据微调器选择来选择这些值 由于某种原因 使用数组字符串作为微调器可以正常工作 这些值将填充到微调器中 无论出于何种原因 我无法获取第二个数组的值来挽救我的生命 它们位于同一个文件中 没有我能找到的错误
  • PHP:str_replace() - 忽略空格

    我有一个类似的字符串 我想将其替换为 问题是我不知道之间是否会有空格 和 可能有空白 也可能没有空白 可能有制表符或可能有换行符 我该如何更换
  • 在 PHP 中比较字符串的方式与 MySQL 相同

    我将 varchar 存储在 utf8 MySQL 表中并使用 utf8 general ci 排序规则 我在 varchar 上有一个唯一索引 我想在 PHP 中进行字符串比较 这相当于 MySQL 对索引所做的操作 一个具体的例子是 我
  • 访问父函数中定义的变量

    有没有办法访问 foo从内部inner function outer foo function inner print foo inner outer PHP 在 PHP 5 3 中 你可以这样做 function outer foo in
  • PHP UTF-8 问题 - 如果我在 PHP 中创建一个字符串...它是 UTF-8 格式吗?

    在 PHP 中 如果我创建一个像这样的字符串 str bla bla here is my string 然后我可以使用 mbstring 函数将该字符串作为 UTF8 进行操作吗 Will this work str mb strlen
  • openssl_decrypt 标签值

    我在网站中使用 openssl encrypt decrypt 方法 但在使用 tag 选项时遇到了一些问题 openssl encrypt data method key options iv tag openssl decrypt da
  • 刷新页面后保留输入值

    我有一个带有输入字段的表单 该输入包含一个下拉菜单 从数据库中读取信息 如果用户输入值 并且当他到达下拉菜单时 他没有找到他想要的内容 他会转到另一个页面将此信息添加到下拉菜单 然后转到第一页继续输入信息 如果他转到另一个页面向下拉菜单添加
  • 如何从数据库生成 Doctrine 实体并使用 PSR-4 自动加载?

    使用教义2 5使用 PSR 4 自动加载并将已设计的数据库模式转换为实体类 注释 问题是将导出的文件放入正确的目录结构中 作曲家 json autoload psr 4 Application src require doctrine or
  • PHP 中消息队列和工作系统的有效架构?

    我正在尝试了解我想要在 PHP 应用程序中实现的消息队列模型和作业 我的目标是卸载需要发送到多个第三方 API 的消息 数据 因此访问它们不会减慢客户端的速度 所以将数据发送到消息队列是理想的 我考虑过仅使用 Gearman 来保存 MQ
  • 未捕获的 SoapFault 异常:[Client] 函数不是此服务的有效方法

    当我尝试使用一些数据访问 wsdl 中的函数 使用 php 中的肥皂客户端 时 出现以下错误 Uncaught SoapFault exception Client Function function nameis not a valid
  • 语言翻译语法

    我正在尝试为我的项目添加另一种语言 我们知道语言可以表现出主语和谓语的差异 例如 英语 Mustafa和他的朋友去看电影ahmet today 土耳其 Mustafa布昆 阿卡达西ahmetile birlikte sinemaya git
  • PHP strtotime +1 个月添加额外一个月[重复]

    这个问题在这里已经有答案了 我有一个简单的变量 可以将今天添加一个月 endOfCycle date Y m strtotime 1 month 今天是 2013 年 1 月 所以我希望返回 2013 02 但我得到的是 2013 03 我
  • Mysql为简单频繁查询创建排序索引性能

    我正在处理一个包含大约 400 万条消息条目的 mysql 表 并尝试根据时间戳选择最新的 50 条消息 另一个要求是返回的消息不以固定前缀开头 问题是单个查询大约占用 25 的 cpu 并且最多需要 1 5 秒 该查询经常由多个客户端执行
  • 解码Json数据数组并插入到mysql

    这个问题可能已经在这里问过 但我尝试搜索找不到它 我有如下 Json 数据 CityInfo CityCode 5599 Name DRUSKININKAI CityCode 2003 Name KAUNAS CityCode 2573 N
  • 我可以在类变量中添加没有指定值的 PHP 数组键吗?

    我目前正在努力通过IBM 关于 CakePHP 的教程 http www 128 ibm com developerworks edu os dw os php cake1 html 有一次我遇到了这段代码
  • Chrome 问题 - 视频流和会话冲突

    我在使用 javascript 和 PHP 实现视频时遇到问题 索引 php session start do other stuff include video php 视频 php
  • 检查外部图像是否存在的正确 PHP 方法?

    我知道至少有 10 个相同的问题有答案 但似乎没有一个对我来说完美无缺 我正在尝试检查内部或外部图像是否存在 图像 URL 是否有效 fopen url r 失败 除非我使用 fopen Warning fopen http example
  • PHP:使用输入和输出参数(不是“INOUT”)调用 MySQL 存储过程

    我想从 PHP 调用 MySQL 中的存储过程 该过程需要输入and输出参数 not INOUT 参数 举一个简单的例子 假设我在 MySQL 中有以下存储过程 DELIMITER DROP PROCEDURE IF EXISTS test

随机推荐

  • TortoiseSVN 在 Windows 7 中的哪里保存密码缓存文件? [复制]

    这个问题在这里已经有答案了 TortoiseSVN 在 Windows 7 中的哪里保存密码缓存文件 I found c users USERNAME AppData TSVNCache目录 但它是空的 In c Users USERNAM
  • 在 Android 中使用 Intent 在 Activity 中传递 Android 位图数据

    我有一个名为的位图变量bmp在活动 1 中 我想将位图发送到活动 2 以下是我用来传递它的意图的代码 Intent in1 new Intent this Activity2 class in1 putExtra image bmp sta
  • 指针向量上的 std::find()

    我想搜索一个指针向量并将指针与int 我最初的想法是使用std find 但我意识到我无法将指针与int Example if std find myvector begin myvector end 0 myvector end do s
  • Python RE 在 /ref= 之后不返回任何内容

    我正在尝试从亚马逊畅销书列表中检索 URL 和类别名称 由于某种原因 当我使用的 RE 遇到 ref 我真的不明白为什么 我在 Windows 7 机器上使用 Python 2 7 一个典型的记录是 li a href http www a
  • Django根据客户端python返回json和html

    我有一个 django 应用程序 它有 html 模板 我还有一个命令行 python api 它可以对服务器上的 django 应用程序执行 GET 和 POST 请求 该 API 几乎可以完成 django 应用程序可以做的所有事情 如
  • 如何重新启动 owl carousel 2.0?

    我知道在猫头鹰旋转木马的第一个版本中我们是这样做的 var carousel carousel var owl carousel data owlCarousel owl reinit touchDrag false mouseDrag f
  • 使用networkx的节点标签

    我正在根据给定的 Y 值序列创建一个图表curveSeq X 值自动枚举 0 1 2 i e for curveSeq 10 20 30 我的图表将包含以下点 lt 0 10 gt lt 1 20 gt lt 2 30 gt 我在同一个图表
  • 了解 .NET 中的垃圾收集

    考虑下面的代码 public class Class1 public static int c Class1 c public class Class2 public static void Main var c1 new Class1 c
  • webgl 本身支持哪些文件格式? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 3D 文件格式有很多替代方案 但我至少需要最小的文件大小 纹理 我已经尝试过一些 但我需要一些建议 我在这里完全有偏见 我是我所建议的项目成员 但你可
  • PHP 中的 realpath 缓存是什么?

    谁能告诉我到底是什么意思realpath cache在 PHP 中 PHP 手册中对此进行了大量引用 但没有任何内容对其进行充分解释 例如 article http www php net manual en function clears
  • Emacs 在进程缓冲区中显示 ^M

    目前 我有一个进程缓冲区utf 8 auto emacs 模型行将缓冲区报告为utf 8 auto dos with CRLF样式换行符 当我通过a将多行文本写入缓冲区时process send region or process send
  • ColdFusion 服务器监控 - 不工作

    我正在尝试在运行 ColdFusion 8 版本 8 0 0 176276 的 Windows Server 2003 网络版 计算机上启动 ColdFusion 服务器监视器 它以独立配置运行 弹出窗口启动为http www mydoma
  • 动态从另一个 apk 加载资源(布局)

    我设法拉出布局 并将其添加到我的视图翻转器中 但是 它被加载为空白 代码是 Resources packageResources Context packageContext try packageResources pm getResou
  • 我们如何以及在哪里编写 try catch 块来处理异常

    我们正在使用C 语言来开发Windows应用程序 我们的 Windows 应用程序由三层组成 UI 业务和数据访问层 在业务层中 有一些公共 业务 方法 UI 通过这些方法与业务层类进行通信 这些公共方法还有一些私有方法来实现所需的功能 D
  • 背景图片在 IE8 中不显示

    所以我有一个在 x 轴上重复的小标题图像 但由于某种原因它不会显示在 IE8 中 有人知道解决方法吗
  • Pandas Dataframe 对象类型 fillna 不同数据类型的异常

    我有一个 Pandas Dataframe 不同的列有不同的数据类型 例如 df dtypes 返回以下内容 Date datetime64 ns FundID int64 FundName object CumPos int64 MTMP
  • 单击后禁用提交按钮

    这是我的代码
  • 如何使用变量值作为对象的属性? [复制]

    这个问题在这里已经有答案了 可能的重复 如何从 JavaScript 中的变量值创建对象属性 https stackoverflow com questions 2241875 我想使用变量中的值作为属性名称来创建一个对象 我有一个名为 p
  • 将 Javascript 语法错误和 console.log 重定向到其他地方

    我试图将 javascript 控制台中通常出现的任何内容发送到我自己的自定义函数 我尝试过以下方法 window console error window console debug window console log window c
  • PHP 多级菜单

    我有一个这样的主题表 id title parent id full path full path用于递归查找父级 像这样 id title full path parent id 40 home 40 0 41 myhome1 41 0