使用 PHP MySQL 创建嵌套 JSON

2024-04-23

我有一个返回某些字段的 SQL 查询,我正在使用json_encode()获取 JSON 格式的数据,但是我无法以我想要的格式获取它。

PHP代码

<?php

function data() {
    $runDistanceBasedOnCityQuery = "SELECT rc.id, rc.cityId, c.cityName, rc.runId, r.distance, rc.status FROM run_city rc INNER JOIN cities c ON c.id = rc.cityId INNER JOIN run_distance r ON r.id = rc.runId ORDER BY c.cityName";
    $runDistanceBasedOnCityResult = $db->prepare($runDistanceBasedOnCityQuery);
    $runDistanceBasedOnCityResult->bindParam(":cityId", $cityId, PDO::PARAM_INT);
    $runDistanceBasedOnCityResult->execute();
    $runDistanceBasedOnCityOutput = $runDistanceBasedOnCityResult->rowCount();
    if ($runDistanceBasedOnCityOutput > 0) {
        while ($runDistanceBasedOnCityRow = $runDistanceBasedOnCityResult->fetch(PDO::FETCH_ASSOC)) {
            $array1 = array($runDistanceBasedOnCityRow['runId'], $runDistanceBasedOnCityRow['distance'], $runDistanceBasedOnCityRow['status']);
            for ($i = 0; $i < sizeof($array1); $i++) {
                $array2 = array("id" => $runDistanceBasedOnCityRow['id'], "runId" => $runDistanceBasedOnCityRow['cityId'], $runDistanceBasedOnCityRow['cityName'] => $array1);
            }

            $finalResultRunDistanceBasedOnCity[] = $array2;
        }
        $responseRunDistanceBasedOnCity = $finalResultRunDistanceBasedOnCity;
    } else {
        $responseRunDistanceBasedOnCity = 'Runs not found';
    }

    $result = array("status" => true,
        "runsBasedOnCity" => $responseRunDistanceBasedOnCity
    );

    json($result);
}

function json($data) {
    header('Content-Type:application/json');
    if (is_array($data)) {
        echo json_encode($data);
    }
}
?>

我得到的 JSON 格式

"runsBasedOnCity": [
    {
        "id": "1",
        "runId": "1",
        "Bengaluru": [
            "2",
            "10k",
            "1"
        ]
    },
    {
        "id": "2",
        "runId": "1",
        "Bengaluru": [
            "1",
            "5k",
            "1"
        ]
    },
    {
        "id": "3",
        "runId": "1",
        "Bengaluru": [
            "5",
            "3k",
            "0"
        ]
    },
    {
        "id": "4",
        "runId": "2",
        "Chennai": [
            "1",
            "5k",
            "1"
        ]
    },
    {
        "id": "5",
        "runId": "2",
        "Chennai": [
            "2",
            "10k",
            "1"
        ]
    },
    {
        "id": "6",
        "runId": "2",
        "Chennai": [
            "4",
            "15k",
            "1"
        ]
    }
]

我需要的格式

"runsBasedOnCity": [
    {
        "id": "1",
        "cityId": "1",
        "Bengaluru": 
         [
            {
              runId : "2",
              distance : "10k",
              status : "1"
            },
            {
              runId : "1",
              distance: "5k",
              status : "1"
            },
            {
              runId : "5",
              distance : "3k",
              status : "0"
            }
        ]
     },
     {
        "id": "2",
        "cityId": "2",
        "Chennai": 
         [
            {
              runId : "1",
              distance : "5k",
              status : "1"
            },
            {
              runId : "2",
              distance: "10k",
              status : "1"
            },
            {
              runId : "4",
              distance : "15k",
              status : "1"
            }
        ]
     }

我无法找出更好的方法来做到这一点,我对此相当陌生,请帮助我。谢谢 !


为了有效地对子数组数据进行分组,您应该实现临时键。cityId是一个合适的分组依据值——因为cityNames将来可能会故意重复,但是cityId决不能在数据库表中无意/无意地重复。

当每一个新cityId遇到时,有条件的isset()调用将确定是否应存储新的/完整的数据集,或者是否应仅将数据附加到子数组。

我正在打电话array_slice()因为它减少了不必要的语法/代码膨胀。

遍历所有行后,您可以重新索引$result数组,将其嵌套在里面runBasedOnCity,并添加status元素。

我将展示我的演示PRETTY_PRINT这样更容易阅读,但在实际代码中,您应该删除该参数。另外,有一条建议——尽量保持变量名称简短,以提高可读性。

Code: (Demo https://3v4l.org/f6Ecq)

$resultset = [
    ["id" => "1", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "2", "distance" => "10k", "status" => "1"],
    ["id" => "2", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "1", "distance" => "5k", "status" => "1"],
    ["id" => "3", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "5", "distance" => "3k", "status" => "0"],
    ["id" => "4", "cityId" => "2", "cityName" => "Chennai", "runId" => "1", "distance" => "5k", "status" => "1"],
    ["id" => "5", "cityId" => "2", "cityName" => "Chennai", "runId" => "2", "distance" => "10k", "status" => "1"],
    ["id" => "6", "cityId" => "2", "cityName" => "Chennai", "runId" => "4", "distance" => "15k", "status" => "1"]
];

foreach ($resultset as $row) {
    if (!isset($result[$row["cityId"]])) {
        $result[$row["cityId"]] = array("id" => $row["id"], "cityId" => $row["cityId"], $row["cityName"] => array(array_slice($row,-3)));
    } else {
        $result[$row['cityId']][$row["cityName"]][] = array_slice($row,-3);
    }
}

if (!isset($result)) {   // don't need to check rowCount() at all
    $result = 'Runs not found';
} else {
    $result = array_values($result);
}

$result = array("status" => true, "runsBasedOnCity" => $result);

var_export(json_encode($result, JSON_PRETTY_PRINT));

Output:

'{
    "status": true,
    "runsBasedOnCity": [
        {
            "id": "1",
            "cityId": "1",
            "Bengaluru": [
                {
                    "runId": "2",
                    "distance": "10k",
                    "status": "1"
                },
                {
                    "runId": "1",
                    "distance": "5k",
                    "status": "1"
                },
                {
                    "runId": "5",
                    "distance": "3k",
                    "status": "0"
                }
            ]
        },
        {
            "id": "4",
            "cityId": "2",
            "Chennai": [
                {
                    "runId": "1",
                    "distance": "5k",
                    "status": "1"
                },
                {
                    "runId": "2",
                    "distance": "10k",
                    "status": "1"
                },
                {
                    "runId": "4",
                    "distance": "15k",
                    "status": "1"
                }
            ]
        }
    ]
}'

在解释了您想要如何保存之后id子数组中的值,这是解决方案:

Code: (Demo https://3v4l.org/5fRfJ)

foreach ($resultset as $row) {
    if (!isset($result[$row["cityId"]])) {
        $result[$row["cityId"]] = array("cityId" => $row["cityId"], $row["cityName"] => array(array("id" => $row["id"])+array_slice($row,-3)));
    } else {
        $result[$row['cityId']][$row["cityName"]][] = array("id" => $row["id"])+array_slice($row,-3);
    }
}

if (!isset($result)) {   // don't need to check rowCount() at all
    $result = 'Runs not found';
} else {
    $result = array_values($result);
}

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

使用 PHP MySQL 创建嵌套 JSON 的相关文章

  • 使用 JArray 从 JSON 获取值

    我有以下字符串 json 格式 我从我的服务器得到 ruta 1 division 7 ruta 2 division 7 ruta 3 division 7 ruta 4 division 7 ruta 5 division 7 ruta
  • Facebook 页面插件无法运行 - 仅适用于一个网站

    我已将页面插件集成到我的目录中 ruhrlink de info php schluessel 150991 不起作用 其他的可以 当我在开发者网站 gt 页面插件中手动输入网址时 它在那里也不起作用 https www facebook
  • Opencart 2.2.0 启用按制造商搜索

    我正在使用 OC 2 2 0 并一直在努力解决以下问题 示例 我在标题搜索中输入西门子 然后单击 显示所有结果 我的搜索页面将显示所有结果 问题是 结果列表仅包含名称中包含西门子的产品 我需要的是展示all 搜索结果列表中属于该制造商的产品
  • 为什么我的自定义 JSONEncoder.default() 忽略布尔值?

    我想将字典转换为带有布尔值的 JSON 字符串True值转换为数字1和布尔值False值转换为数字0 我正在使用一个JSONEncoder子类 但它似乎忽略布尔值 import json class MyEncoder json JSONE
  • 在 PHP 中自动加载类的最佳方法

    我正在开发一个项目 该项目具有以下文件结构 index php lib lib type class name php lib size example class php 我想自动加载类 class name 和 example clas
  • 在C++中初始化抽象基类的子类数组

    我有一个 C 抽象基类 需要创建一个数组来存储它的子类对象 我使用指向子类的指针 因为数组的每个成员都需要具有相同的大小 目前我正在声明并初始化我的数组 如下所示 BaseClass array array SubClass1 SubCla
  • 调用不同 SELECT 语句的 MySQL IF/CASE 语法

    我在使用 MySQL 时遇到问题IF or CASE syntax 程序是这样的 我有一个调用 MySQL 查询的 PHP 项目 假设 PHP 传递变量X If X is not 0那么它应该执行如下查询 SELECT FROM table
  • 最近的 Facebook API 的 FQLQuery

    我下载了最新的 Facebook PHP SDK 当我想要获取有关帖子的信息 例如点赞数 评论数和分享数 时 我的查询可以正常工作 但是 当我想获取用户的好友数量时 它不起作用并告诉我 Facebook FacebookAuthorizat
  • php-webdriver:使用 click() 提交表单后等待浏览器响应

    除了使用sleep 在我的测试中 我想知道是否有人知道更好的策略 可以在继续我的断言之前显式等待表单提交 POST 完成 这是我的测试的一个非常浓缩的版本 结合使用 phpunitphp webdriver https github com
  • 显示不同表中的名称而不是 ID

    我有 2 张桌子 Category带主键ID和列Name Employee带主键ID和列Category id Note Category id现在显示ID正确地 我想展示Name代替ID对于输出Employee Attempt categ
  • JSON 值无法转换为 System.Collections.Generic.List

    我正在尝试列出游戏中的所有项目using System Text Json 我对使用 json 文件很陌生 我尝试这样做来测试它是否有效 List
  • 如何在 Ruby on Rails 中读取远程文件的内容?

    这是我的文件 http example com test txt http example com test txt 我必须阅读以下内容http example com test txt http example com test txt
  • 将 XML 转换为 JSON 时保留 json:Array 属性

    我有一段 XML 看起来像
  • @mysql_connect 和 mysql_connect

    我使用 PHP 连接到数据库没有问题 但是在我测试过的一些脚本中 我发现连接命令存在细微差别 有什么区别 mysql connect and mysql connect 我从未使用过 编写我自己的脚本时使用的符号 所以只是想知道它是否有用
  • 使用 net/http 发送 Post 请求

    我需要将 JSON 数据发送到同一台计算机上运行的另一个应用程序 我像这样发送请求 rails 3 2 13 data some data hash url URI parse http localhost 6379 api plans r
  • 响应中的有效 JSON

    我正在开发客户端和服务器应用程序 遇到了一个有趣的问题 我们正在创建一个 Restful API 并通过 JSON 响应与客户端进行通信 执行 DELETE 时 我们将返回 200 OK 和空白响应 我们的客户收到 200 OK 但解析 J
  • 使用Ajax使用php将记录插入mysql数据库

    如何使用 Ajax 对此代码进行编码 请帮助 我是 Bignner 我已经编写了这段代码 它可以工作 但我想与 ajax 一起使用 因为不想重新加载页面 PHP文件 Code For Making Form And getting Data
  • 在 Woocommerce 中以编程方式创建新产品属性

    如何通过插件为 WooCommerce 创建属性 我只找到 wp set object terms object id terms taxonomy append From 这个堆栈问题 https stackoverflow com qu
  • 在 CakePHP 中访问 Configuration::read 控制器

    我的 CakePHP 应用程序有一个单独的配置文件 该文件加载在 bootstrap php 中 我的问题是 如何访问控制器中的配置变量 IE 如何在控制器中执行Configure read variable 函数 谢谢 在我的自定义配置文
  • 如何提高MySQL INSERT和UPDATE性能?

    我们数据库中的 INSERT 和 UPDATE 语句的性能似乎正在下降 并导致我们的 Web 应用程序性能不佳 表是InnoDB 应用程序使用事务 我可以做一些简单的调整来加快速度吗 我认为我们可能会遇到一些锁定问题 我怎样才能找到答案 你

随机推荐

  • 带有 JSpinner 的 JTable 启用/禁用

    我有一个 3 列的 JTable 第 2 列是一个复选框 我想启用 禁用该行的 JSpinner 我已经按照我想要的方式工作了 除了一件事 JSpinner 实际上看起来并不像是被禁用的 文本和微调器按钮呈灰色 我不太确定如何实现这一点 我
  • parseInt() 和 parseFloat() 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 parseInt 和 parseFloat 之间的行为差 异 https stackoverflow com questions 9528433 behavior difference between
  • 相同代码的货物构建:虚假的编译时错误?

    我有板条箱A取决于B and B取决于rust nmea https github com Dushistov rust nmea crate 如果我建造箱子A我遇到了很多错误 所有错误都错过了 use std error Error 在构
  • 取消按下 esc 键时的用户输入的简单方法?

    Is there a simple way to cancel the user input in a JTextField when key Esc is pressed 我的意思是与关键侦听器和数据备份不同的东西 Thanks Add
  • Selenium waitFor 机制的内部工作原理是什么?

    我试图通过拦截对 doClick locator 的调用来自定义 Selenium 单击命令的行为 通过 user extentions js 基本上 每当我们的应用程序的 繁忙指示器 显示时 我都需要延迟单击操作 现在这种事情的标准答案是
  • Android Wear 上长时间运行的应用程序

    Android Wear 生态系统似乎是围绕用户将与之交互然后关闭的快速任务构建的 这对于大多数应用程序来说都非常有效 但是对于一个涵盖长时间运行的任务并且在手表休眠时不应自动关闭的应用程序又如何呢 我的具体案例 通过 Swing 高尔夫
  • 在 Kotlin 中测试 CoroutineScope 基础设施

    有人能够向我展示如何使该 viewModel 中的 getMovies 函数可测试吗 我无法进行单元测试来正确等待协程 1 我很确定我必须创建一个测试 CoroutineScope 和一个正常的 lifeCycle CoroutineSco
  • PHP 替换,但替代替换字符串

    好的 这就是我想做的 我正在尝试使用 PHP 来开发本质上是tinyMarkdown 实现的子集 不值得使用完整的 Markdown 类 我本质上需要执行 str replace 但每次出现针时都会交替替换替换字符串 以便处理开始和结束 H
  • 如何统计字符串中特定字符的出现次数

    我不知道从哪里开始检查字符串中特定字符的 n 次出现 我已经列出了我认为是该功能框架的基本轮廓 但我不确定内容是什么 let countCharFromNth getStr string chkdChar char if getStr Le
  • 网络适​​配器无法建立连接 - Oracle 11g

    我编写了一个 servlet 程序 我希望它连接到我的 Oracle 数据库 但它给了我一个错误 我正在使用 Eclipse Helios Tomcat 6 0 37 Oracle 11g 11 2 0 1 0 ojdbc6 jar 在服
  • Android JSON Jackson 教程 [关闭]

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

    我有一个新的小键盘 没有 F 11 和 F 12 键 就我而言 这个键经常使用 我不会更改此键 例如 F 11 更改为 F 8 F 12 更改为 F 9 如何才能将其更改为 F 11 和 F 12 简单的方法 转到工具 选项 环境 键盘 您
  • SQL中有没有快速更新多条记录的方法?

    我需要用我根据 CodeID 创建的新名称替换 20 000 多个名称 例如 我必须用 cat 更新包含 dog 其 CodeID 为 1 的所有行 并用 bird 更新包含 horse 其 CodeID 为 2 的所有行 等等 第一个 S
  • 在Python中,什么是“sys.maxsize”?

    我假设这个数字 2 63 1 是 python 可以处理或存储为变量的最大值 但这些命令似乎运行良好 gt gt gt sys maxsize 9223372036854775807 gt gt gt a sys maxsize 1 gt
  • 如何立即查看 AppCode 中的 Swift 错误?

    有没有办法立即看到 AppCode 中的 Swift 错误 在他们的网站上 他们谈论静态代码分析 但我找不到任何地方可以声称这种情况会立即发生 当您在 Xcode 中输入一些 Swift 代码时 您通常会立即看到警告 错误等 在 AppCo
  • 通过 WCF 进行日志记录而不减慢速度

    我们的应用程序中有一个每月运行一次的大型流程 此过程通常运行约 30 分钟 并生成约 342000 个日志事件 最近 我们使用 WCF 将日志记录更新为集中式模型 但现在遇到了性能问题 以前的解决方案大约需要 30 分钟即可完成 但采用新的
  • cygwin + Windows套接字编程

    我正在尝试学习 Windows 中的 Socket 编程 并使用 cygwin 来实现同样的目的 我发现所需的文件位于 usr include w32api 我从网上获取了一个示例程序并尝试编译但无法这样做 相同的代码是 include
  • 在Tensorflow中,sampled_softmax_loss和softmax_cross_entropy_with_logits有什么区别

    在张量流中 有一些方法称为softmax cross entropy with logits https www tensorflow org versions master api docs python tf nn softmax cr
  • 如何使用具有圆角背景的文本覆盖图像

    我需要在 HTML 中复制您在此图中看到的内容 问题是文本覆盖了 div 和背景图像 如果外部 div 中没有图像并且没有纯色 我可以想象我可以相当轻松地使用一些带有圆角的小 html 元素放置在正确的位置来完成此操作 但是背景图像是是什么
  • 使用 PHP MySQL 创建嵌套 JSON

    我有一个返回某些字段的 SQL 查询 我正在使用json encode 获取 JSON 格式的数据 但是我无法以我想要的格式获取它 PHP代码