gpt4 book ai didi

php - 返回对象数组的数组

转载 作者:搜寻专家 更新时间:2023-10-31 20:36:19 25 4
gpt4 key购买 nike

我有一些分层数据,因此创建了它:

CREATE TABLE `departments`
(`deperatment_id` INTEGER NOT NULL,
`department_name` varchar(32) NOT NULL);

INSERT INTO `departments`(`deperatment_id`, `department_name`)
VALUES (1, "HR"), (2, "Software"), (3, "Accounts");

CREATE TABLE `jobs` (`deperatment_id` INTEGER NOT NULL,
`job_id` INTEGER NOT NULL,
`job_name` varchar(32) NOT NULL);

INSERT INTO `jobs` (`deperatment_id`, `job_id`, `job_name`)
VALUES (1, 1, "Idiot"),
(1, 2, "Fool"),
(2, 3, "PHB"),
(2, 4, "Software guru"),
(2, 5, "PFY"),
(3, 6, "Number cruncher");

CREATE TABLE `peeps` (`job_id` INTEGER NOT NULL,
`peep_name` varchar(32) NOT NULL);

INSERT INTO `peeps`(`job_id` , `peep_name` )
VALUES(1, "Smith"),
(2, "Jones Major"),
(2, "Jones Minor"),
(4, "Mr. In-the-wrong-department"),
(4, "Mawg"),
(5, "William Topaz McGonagall"),
(6, "Blaise Pascal"),
(6, "Isaac Newton");

因此,如您所见,可以有一个或多个部门,每个部门可以有一项或多项工作,由一个或多个人完成。

这是一个整洁的树层次结构,我想返回它以响应 AJAX 请求,所以我有三个嵌套的 for 循环,每个循环发出一个 SELECT 语句(男女不可用,因为它在家里& 我在办公室,但我相信你可以想象它;它很简单)。

我在客户端遇到了一些问题,试图添加一个新的空白条目,并且 it was suggested我应该淘汰一组对象,as shown here .

但是,这仅显示了深度级别,因此带有 while ($row = $stmt->fetch(PDO::FETCH_OBJ)) 的单个 SELECT 是足以构建返回值 - 一个对象数组。

如何构建我的返回值,这将是对象数组的嵌套数组?


[更新] 我删除了之前对 fiddle 的引用,因为它至少让一个人感到困惑。

我想返回一个部门数组,每个部门包含该部门的数据,还有一个职位数组,每个职位包含该职位的数据,以及执行该职位的人员数组


[更新] 这是给某人的简单 50 分。

@YeldarKurmangaliyev 的回答已经完成了 90%,但我只需要对两个小问题进行一些启发。

  • 他的 SQL 不显示与部门 关联的数据。我怀疑我只需要 (INNER?) JOIN departments.*。但具体的 SQL 命令是什么?

  • PHP 代码是什么?我怀疑 $result = $sqlQuery->fetchAll(PDO::FETCH_ASSOC); 或类似的

顺便说一句,有 a fiddle对于 SQL

我最大的努力只返回一个平面数组,而不是嵌套树,如发布的答案所示:-(


[更新] 感谢您的精彩回答。为了帮助别人,我在 http://phpfiddle.org/main/code/xfdj-wthc 上发布了一个工作 fiddle 。

请注意,该解决方案支持多个外键,而我只有一个。我可以简化个人使用的代码,但感谢@trincot 让它变得如此灵活,因为这可能对其他人有用。

最佳答案

如果要输出树状结构,那么就不需要使用循环了。您可以简单地进行以下查询:

SELECT p.`peep_name`, j.* FROM `peeps` p INNER JOIN `jobs` j ON j.job_id = p.job_id

这将返回如下结构:

peep_name                   deperatment_id  job_id  job_name
Smith 1 1 Idiot
Jones Major 1 2 Fool
Jones Minor 1 2 Fool
Mr. In-the-wrong-department 2 4 Software guru
Mawg 2 4 Software guru
William Topaz McGonagall 2 5 PFY
Blaise Pascal 3 6 Number cruncher
Isaac Newton 3 6 Number cruncher

然后,您将能够以这种格式输出这些数据,或者将这些数据组合成所需格式的树结构。例如,您可以将其输出为以下格式:

{
"departments":
[
{
"ID": 1,
"jobs":
[
{
"ID": 1,
"Name": "Idiot"
"Peeps":
[
"Smith"
]
},
{
"ID": 2,
"Name": "Fool"
"Peeps":
[
"Jones Major",
"Jones Minor"
]
}
]
},
// etc.
]
}

关于php - 返回对象数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34196818/

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