
本文旨在帮助开发者使用 PHP 从 SQL 数据库中检索数据,并将其组织成一个包含问卷调查及其对应问题的多维数组。通过提供的示例代码,你将学习如何正确构建数据结构,避免数据重复,最终生成符合预期的 JSON 格式。
在 PHP 中,从 SQL 数据库获取数据并将其组织成特定的数组结构是一项常见的任务。当数据之间存在层级关系时,例如问卷调查及其对应的问题,我们需要构建多维数组来反映这种关系。本教程将指导你如何使用 PHP 从 SQL 查询结果构建一个包含问卷调查及其问题的数组,并避免数据重复的问题。
目标数据结构如下:
[
{
"Questionnaires": {
"id": "x",
"name": "x",
"questions": [
{
"id": "x",
"name": "x"
},
{
"id": "x2",
"name": "x2"
}
]
}
}
]这个结构表示一个包含多个问卷调查的数组。每个问卷调查都有一个 id 和 name,以及一个包含多个问题的 questions 数组。每个问题也有一个 id 和 name。
立即学习“PHP免费学习笔记(深入)”;
首先,我们需要编写 SQL 查询来获取所需的数据。假设我们有三个表:questionnaires(问卷调查)、questions(问题)和 questionnaireshasquestions(问卷调查和问题之间的关联)。
SELECT questionnaires.id AS QuestionnaireId, questionnaires.title AS QuestionnaireTitle, questions.id AS QuestionId, questions.text AS Question FROM questionnaires INNER JOIN questionnaireshasquestions qa ON qa.idQuestionnaire = questionnaires.id INNER JOIN questions ON questions.id = qa.idQuestion;
这个查询将返回一个结果集,其中每一行包含一个问卷调查的 ID、标题以及与该问卷调查相关的一个问题的 ID 和文本。
以下 PHP 代码演示了如何使用查询结果构建目标数组结构:
<?php
// 假设 $conn 是你的数据库连接对象,并且已经成功连接到数据库
$sql = "SELECT questionnaires.id AS QuestionnaireId, questionnaires.title AS QuestionnaireTitle, questions.id AS QuestionId, questions.text AS Question FROM questionnaires INNER JOIN questionnaireshasquestions qa ON qa.idQuestionnaire = questionnaires.id INNER JOIN questions ON questions.id = qa.idQuestion";
$result = $conn->query($sql);
$data = ['questionnaires' => []];
while ($row = $result->fetch_assoc()) {
$id = $row['QuestionnaireId'];
if (!isset($data['questionnaires'][$id])) {
// 首次遇到此 QuestionnaireId,创建容器来收集相关问题
$data['questionnaires'][$id] = [
'id' => $row['QuestionnaireId'],
'title' => $row['QuestionnaireTitle'],
'questions' => [],
];
}
// 将问题添加到集合中
$data['questionnaires'][$id]['questions'][] = [
'id' => $row['QuestionId'],
'text' => $row['Question'],
];
}
// 将数组重新索引,去除键名
$data['questionnaires'] = array_values($data['questionnaires']);
// 输出 JSON 格式
header('Content-Type: application/json');
echo json_encode($data);
?>代码解释:
通过本教程,你学习了如何使用 PHP 从 SQL 查询结果构建一个包含问卷调查及其问题的多维数组。关键在于理解目标数据结构,并在循环遍历结果集时正确地构建数组。通过检查 QuestionnaireId 是否已经存在,可以避免数据重复的问题。最终,你可以将数组转换为 JSON 格式,方便在前端或其他应用程序中使用。
以上就是PHP 从 SQL 获取包含子数组的数组的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号