MySQL 的 Json 菜单结构

2024-01-07

我一直在思考这个问题,看起来很简单。我正在尝试使用 PHP/MYSQL 生成菜单/子菜单 json 输出:这些是表格:

   CREATE TABLE `menuHome` 
  `id`,
  `titleName`

   CREATE TABLE `menu` 
  `id`,
  `parentmenu`,
  `name`

“menuHome”将具有“titleName”,例如“关于我们”,在“menu”上由“parentmenu”加入“id”,这将具有多个条目,例如“历史”、“所有者”、“新闻”。

我想要实现的结构是:

`
 {
  "menu" : {
    "sections" : [
      {
        "title" : "About Us",
        "items" : [
          {
            "name" : "History",
            "id" : "0909"
          },
          {
            "name" : "Owners",
            "id" : "0910"
          },
          {
            "name" : "News",
            "id" : "0916"
          }
        ]
      },
      {
        "title" : "Contact Us",
        "items" : [
          {
            "name" : "Address",
            "id" : "0949"
          },
          {
            "name" : "Map",
            "id" : "0978"
          }
        ]
      },
      {
        "title" : "Products",
        "items" : [
          {
            "name" : "Jeans",
            "id" : "1010"
          },
          {
            "name" : "Tables",
            "id" : "1088"
          },
          {
            "name" : "Shoes",
            "id" : "2424"
          }
        ]
      }
    ]
  }
}


`

我已经尝试过,while,for,for every 在很多配置中,但我无法让它构建正确的数组结构来编码为 json。我现在处于代码盲阶段,所以任何帮助都会得到极大的帮助

这是我最后一次尝试:

     $sql_query  = 'SELECT menuHome.titleName, menuHome.id FROM menuHome';
        $result = $mysqli->query($sql_query);
        $menu = array();
        while ($row = $result->fetch_assoc()) {

        $menuid = $row["id"];

        $sql_query2  = 'SELECT menu.name, menu.id FROM menu WHERE menu.parentmenu = "' .  $menuid . '"';

        $result2 = $mysqli->query($sql_query2);

        while ($row2 = $result2->fetch_assoc()) {

         $menu[$row["titleName"]][] = $row2;


         }
        }

return json_encode($menu); 

这是上面带来的结果:

{
  "About Us" : [
    {
      "name" : "History",
      "id" : "1"
    },
    {
      "name" : "Owners",
      "id" : "2"
    },
    {
      "name" : "News",
      "id" : "3"
    }
  ],
  "Contact Us" : [
    {
      "name" : "Address",
      "id" : "4"
    },
    {
      "name" : "Map",
      "id" : "5"
    }
  ],
  "Products" : [
    {
      "name" : "Jeans",
      "id" : "6"
    },
    {
      "name" : "Tables",
      "id" : "7"
    },
    {
      "name" : "Shoes",
      "id" : "8"
    }
  ]
}

问题是我无法事先获得“对”-“标题”=“关于我们”......这很简单,但我对这个问题已经脑死亡了。

我可以在 json_encode 之前添加此内容:

  $menuoutput = array("menu" => array("sections" => array($menu)));

但是我如何让“key”“titleName”或只是“title”显示在“关于我们”之前......


  • 首先我假设你的数据是这样的 -

插入menu
(id, parentmenu, name)
价值观
(1,1,“历史”),
(2,1,“所有者”),
(3,1,“新闻”),
(4,2,“地址”),
(5,2,“地图”),
(6,3,“牛仔裤”),
(7,3,“表”),
(8,3,“鞋子”);

插入菜单首页
(id,titleName)
价值观
(1,“关于我们”),
(2,“联系我们”),
(3、“产品”);

  • 其次,我建议您将查询更改为 -

从菜单中选择 pm.id、cm.id、pm.titleName、cm.name 作为 cm
LEFT JOIN(菜单主页为 pm)
ON (pm.id = cm.parentmenu);

  • 第三,让我们开始编码


为了我们的目的,我们想要这样的东西 -

$arys = [“菜单”=>[“部分”=> [
[“标题”=>“关于我们”,“项目”=>[
[“名称”=>“历史记录”,“id”=>1],
[“名称”=>“所有者”,“id”=>2],
["name"=>"新闻","id"=>3]
]],
[“标题”=>“联系我们”,“项目”=>[
[“名称”=>“地址”,“id”=>4],
[“名称”=>“地图”,“id”=>5]
]],
[“标题”=>“产品”,“项目”=> [
[“名称”=>“牛仔裤”,“id”=>6],
[“名称”=>“表”,“id”=>7],
[“名称”=>“鞋子​​”,“id”=>8]
]]
]
]
];

那么让我们来构建它

$querys = "从菜单中选择 pm.id AS pmd , cm.id AS cmd, pm.titleName AS pmt, cm.name AS cmt 作为 cm left join (menuHome as pm) on (pm.id = cm.parentmenu) 订单通过pmd,cmd“;
$结果 = mysql_query($query);
$jsary = [“菜单”=> [“部分”=> []]];
$lastPid = 0;
$当前Pid = 0;
$标题=“”;
$iff = 0;
$els = 0;
while($row = mysql_fetch_array($结果))
{
$currentPid = $row['pmd'];
$title = $row['pmt'];

    $cmd = $row['cmd'];
    $cmt = $row['cmt'];

    if($lastPid != $currentPid)
    {
            $insAry = [];
            $insAry = ["title"=> $title, "items" => [["name" => $cmt, "id" => $cmd]]];
            array_push($jsary["menu"]["sections"], $insAry);
            $lastPid = $currentPid;
            $ifff = $ifff + 1;
            $currentPid = 0;
    }
    else
    {
            $ind = 0;
            if($ifff > 0)
            {
                    $ind = $ifff-1;
            }
            $insAry = [];
            $insAry = ["name" => $cmt, "id" => $cmd];
            array_push($jsary["menu"]["sections"][$ind]["items"], $insAry);
    }}

现在只需调用 json_encode()

json_encode($jsary);

你将会得到你想要的输出

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

MySQL 的 Json 菜单结构 的相关文章

  • nlohmann/json 框架中的未知断点

    一段时间以来 当我在启用断点的 Xcode 下运行我的应用程序时 我显然在名为 nlohmann basic json 的系统框架中遇到了一个未知断点 我可以毫无问题地继续执行 但这无论如何都很烦人 知道这个断点的原因是什么 或者更好的是
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • CakePHP 视图包括其他视图

    我有一个 CakePHP 应用程序 在某些时候会显示带有产品媒体 图片或视频 的视图 我想知道是否有某种方式可以包含另一个威胁视频或威胁图片的视图 具体取决于标志 我想将这些 小视图 用于其他几个目的 所以它应该 像 蛋糕组件一样 以便重用
  • 如何从网站网址中隐藏 .html 扩展名

    我知道这个问题以前曾被问过 但有人知道隐藏 html 扩展名的好方法吗 我已经尝试了许多代码和许多答案https stackoverflow com https stackoverflow com 但我没有看到结果 那是我再问你一次 我有一
  • 如何在 GitHub Action 中使用不同版本的 PHP 进行测试

    我有一些 PHP 代码 其中包含使用以下命令运行的测试PHPUnit并想对其进行测试GitHub Actions 我在他们的文档中找不到测试 PHP 包的方法 我想使用不同版本的 PHP 进行测试 但他们只有最新的版本7 3安装 您可以添加
  • 如何在 JavaScript 中创建服务器端进度指示器?

    我想在我的网站中创建一个部分 用户可以在其中进行一些简单的操作update纽扣 这些中的每一个update按钮将发送到服务器 并在幕后进行长时间的处理 当服务器处理数据时 我希望用户有某种进度指示器 例如进度条或文本百分比 我使用 jQue
  • 在哪里可以学习网络编程从入门到精通? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我尝试做教程 但它是无组织且无结构的 我在哪里可以学习 PHP 从初学者到大师 我正在寻找类似的网站w
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • Ajax 调用诸如 'for (;;); 之类的响应是什么? { json 数据 }' 是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么人们会写这样的代码 throw 1 和 for 在 json 响应前面 https stackoverflow com questions 3146798 why do people put c
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 雄辩的第一个 where 子句

    我想知道 Laravel 如何实现雄辩的语法 以便可以静态调用第一个 where 子句User where User where id 23 gt where email email gt first 他们有吗public static f
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert

随机推荐

  • 如何将动画视图捕获为视频

    我正在使用反应本机图像来显示网络上某些网址的一些图像 现在 根据某些条件 我以不同的时间间隔更新图像网址 我想将整个过渡捕获到视频文件中 但是 我找不到合适的 android API 用于本机端 或react native 包来实现这一点
  • 如何测量函数运行的时间?

    我想查看一个函数运行了多长时间 所以我在表单上添加了一个计时器对象 并得到了以下代码 private int counter 0 Inside button click I have timer new Timer timer Tick n
  • AWS S3 ACL 公共读写:安全问题

    我想要一些关于 AWS S3 ACL 公共读写的解释 来自docs http docs aws amazon com AmazonS3 latest dev acl overview html 所有者获得 FULL CONTROL AllU
  • R 图 - 具有颜色渐变的正态曲线

    How can I make curves with a color gradient in R Take a look at this flame 它应该看起来像那样 我尝试制作一条法线曲线 然后制作另一条法线曲线 但从技术上讲 你无法用
  • 等待文件上传

    我遇到了困难 我正在尝试使用 WatiN 上传文件 我可以加载上传框 但它很快就消失了 目前我的代码的最后一行是 ie FileUpload Find ById profile file Click 它加载对话框以选择图片但消失 是否可以自
  • Fiware-Orion:订阅所有实体

    在 Orion 1 4 0 中我使用以下 JSON 来订阅对于所有实体 description Update average rating subject entities idPattern type condition attrs no
  • 在 notepad.exe 中挂钩 CreateFile 不会捕获 API 调用

    我的最终目标是通过在 kernel32 dll 中挂钩文件 api 来跟踪 explorer exe 完成的文件操作 但是我尚未实现该操作 explorer exe 没有调用 API 或者我这边出了问题 为了弄清楚发生了什么 我设置了一个目
  • 有趣的错误?在操作系统中预装了 Ruby (1.8.7)

    2 2 gt 4 2 63 gt 9223372036854775808 2 63 2 63 gt 18446744073709551616 64以及它返回后的一切0 2 64 gt 0 2 65 gt 0 2 100 gt 0 2 100
  • 删除 List 中的替代元素

    删除替换 奇数索引或偶数索引 元素的最有效方法是什么List
  • 如何在 openssl 1.0.1 中加载 CRL 路径?

    自从我更新到 openssl 1 0 1 以来 我的应用程序中的吊销检查功能已损坏 在 apps verfiy c 的帮助下 我发现 CRL 文件的加载发生了变化 到目前为止我已经完成了以下操作 X509 LOOKUP lookup con
  • Autoconf——包括静态库(新手)

    我正在尝试将我的应用程序从手动构建迁移到 autoconf 到目前为止 它运行得很好 但我有一个静态库 我不知道如何集成 该库不会位于通常的库位置 二进制文件 a 文件 和头文件 h 文件 的位置将作为配置参数给出 值得注意的是 即使我将
  • jquery如何克隆引导行

    我正在尝试克隆引导行 但每次我得到多行 1 2 4 8 等 clone click function cloned row first clone insertAfter cloned row HTML div class cloned r
  • 什么是 OutOfMemoryError 以及如何调试和修复它

    我的 Java 程序抛出了一个OutOfMemoryError 我该如何调试并解决这个问题 许多 Java 新手都在努力应对OutOfMemoryError 这是创建一个规范问题的尝试 该问题将回答有关某个问题的最常见问题OutOfMemo
  • iOS PDF 解析 Type 1 字体指标

    我正在 尝试 编写一个 PDF 到纯文本解析器 我使用 pdfKitten 作为示例 我的 PDF 包含 标准 14 种字体 中包含的 type1 字体 随后 PDF 字体字典不包含 Widths FirstChar LastChar 的键
  • 从我的域发送电子邮件还是从管理员 Google 帐户发送电子邮件?

    我有一个域 xyz com 现在它指向 appspot 中的我的应用程序 我想向用户发送各种事件的电子邮件警报 但是 appengine 将电子邮件发件人限制为用于创建 Google 应用引擎帐户的管理员电子邮件地址 我可以代表发送电子邮件
  • 假设我有一个引用该控件的 CWnd 对象,有没有办法获取对 MFC 对话框上所有子窗口或控件的引用?

    假设我有一个 MFC 对话框 上面有几个按钮 例如 红色 蓝色 绿色 和 黄色 按钮 这些按钮都有 ID 例如 IDC BUTT RED IDC BUTT BLUE IDC BUTT GREEN IDC BUTT YELLOW 假设我有一个
  • 为什么 Date.parse('COVINGTONOFFICE-2') 返回真实日期? [复制]

    这个问题在这里已经有答案了 console log Date parse COVINGTONOFFICE 2 981003600000 console log new Date COVINGTONOFFICE 2 toDateString
  • 在 ClearCase 文件夹中查找更改的文件

    我在 ClearCase 中有一个文件夹 其中包含大量报告 我已经检查了所有报告 因为我需要进行彻底的更改 我更改了一组报告 现在想要部署这组报告 我可能应该一次检查一个报告文件 然后在完成后部署每个报告文件 但是 由于我没有这样做 有没有
  • 部署“react-admin”应用程序时,Heroku 服务器因“JavaScript 堆内存不足”而崩溃

    我目前正在使用 react admin 开发一个管理面板 该面板在我的本地运行良好 但是一旦我将应用程序上传到 Heroku 构建就会失败并出现以下错误 致命错误 接近堆限制的无效标记压缩分配失败 JavaScript 堆内存不足 我已将问
  • MySQL 的 Json 菜单结构

    我一直在思考这个问题 看起来很简单 我正在尝试使用 PHP MYSQL 生成菜单 子菜单 json 输出 这些是表格 CREATE TABLE menuHome id titleName CREATE TABLE menu id paren