PHP/MySQL - JSON 中的嵌套组
Posted
技术标签:
【中文标题】PHP/MySQL - JSON 中的嵌套组【英文标题】:PHP/MySQL - Nested groups in JSON 【发布时间】:2021-10-05 21:07:43 【问题描述】:我正在 JSON 中创建嵌套(分层)组。结构很简单——grand parent -> parent -> child
:
main
secondary
mcondition
这是使用下面的 mysql/php 来格式化main -> mcondition
。
我应该如何更改它以在 main 和 mcondition 之间添加第二级(“次要”,例如父级)?
次要的列是mcondition.secondary
$query = 'SELECT * FROM mcondition ORDER BY mcondition.main ASC';
$result = $connection->query( $query );
$results = array();
$temp = array();
while ($line = mysqli_fetch_array($result))
$results[] = $line;
foreach($results as $row)
$temp[$row['main']]['text'] = $row['main'];
if(!isset($temp[$row['main']]['children']))
$temp[$row['main']]['children'] = array();
array_push($temp[$row['main']]['children'], array(
'id' => $row['mcondition_pk'],
'text' => $row['mcondition_name']
));
$temp = array_values($temp);
echo json_encode($temp);
这是 JSON 目前的样子:
[
"text": "Main Heading 1",
"children": [
"id": "1",
"text": "mcondition_1"
,
"id": "17",
"text": "mcondition_4"
]
,
"text": "Main Heading 2",
"children": [
"id": "49",
"text": "mcondition_2"
,
"id": "48",
"text": "mcondition_5"
]
,
"text": "Main Heading 3",
"children": [
"id": "68",
"text": "mcondition_3"
,
"id": "67",
"text": "mcondition_6"
]
]
这是表mcondition的结构:
+---------------+------------+------+-----------+
| mcondition_pk | mcondition | main | secondary |
+---------------+------------+------+-----------+
mcondition
列是唯一的。
【问题讨论】:
我对输出 json 应该是什么样子有点困惑。也许您可以提供所需 json 项目的样本,以及源数据库表或其结构的样本。我也不清楚为什么你不一次创建临时数组的每个项目,而不是使用 isset 检查子元素是否存在,如果不存在则创建它,然后将 mcondition_ 推送给它。主要是独一无二的吗?如果这不是重复项应该发生的事情?如果是那么我不知道检查是否必要,只需一次创建整个数组元素。 @ChrisStricland 查看更新的 OP。 mcondition 是唯一的,在 Select2 中总是有祖父(主)和父(次)标题 @IlludiumPu36 您可以添加您正在寻找的预期 JSON 吗? 【参考方案1】:我仍然不能 100% 确定您预期的 json 会是什么样子,但您应该能够执行这样的操作。您可能需要进行一些修改才能得到您想要的。我正在使用数组 $results 来模拟从数据库中获取数据。这将为您提供一个嵌套的层次结构。
$out = [];
$results = [
['main' => 'mk1', 'secondary' => 'sk1', 'mcondition_pk' => 1, 'mcondition' => 'mcondition_1'],
['main' => 'mk1', 'secondary' => 'sk2', 'mcondition_pk' => 2, 'mcondition' => 'mcondition_2'],
['main' => 'mk1', 'secondary' => 'sk2', 'mcondition_pk' => 3, 'mcondition' => 'mcondition_3'],
['main' => 'mk2', 'secondary' => 'sk3', 'mcondition_pk' => 4, 'mcondition' => 'mcondition_4'],
['main' => 'mk2', 'secondary' => 'sk3', 'mcondition_pk' => 5, 'mcondition' => 'mcondition_5'],
['main' => 'mk3', 'secondary' => 'sk4', 'mcondition_pk' => 6, 'mcondition' => 'mcondition_6'],
['main' => 'mk3', 'secondary' => 'sk5', 'mcondition_pk' => 7, 'mcondition' => 'mcondition_7'],
['main' => 'mk3', 'secondary' => 'sk5', 'mcondition_pk' => 8, 'mcondition' => 'mcondition_8'],
];
foreach($results as $row)
$mk = $row['main'];
$sk = $row['secondary'];
$pk = $row['mcondition_pk'];
$cond = $row['mcondition'];
$temp = ['id' => $pk, 'text' => $cond];
if(!isset($out[$mk])) $out[$mk] = ['text' => $mk];
if(!isset($out[$mk][$sk])) $out[$mk][$sk] = ['text' => $sk, 'children' => []];
$out[$mk][$sk]['children'][] = $temp;
echo "<pre>"; print_r($out); echo "</pre>";
$json = json_encode($out);
echo "<pre>"; print_r($json); echo "</pre>"; exit;
【讨论】:
以上是关于PHP/MySQL - JSON 中的嵌套组的主要内容,如果未能解决你的问题,请参考以下文章