PhP编码中的复杂嵌套JSON数组
我已经从数据库中创建了一个JSON文件,它有两个属性为id、semone、sement、cname的表,以及属性为coname和credit的表courses 我用php编写的代码如下 main.phpPhP编码中的复杂嵌套JSON数组,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我已经从数据库中创建了一个JSON文件,它有两个属性为id、semone、sement、cname的表,以及属性为coname和credit的表courses 我用php编写的代码如下 main.php <?php $user = "root"; $password = ""; $database = "scheduler"; $con = mysqli_connect("localhost", $user, $password, $database) o
<?php
$user = "root";
$password = "";
$database = "scheduler";
$con = mysqli_connect("localhost", $user, $password, $database) or die ("Unable to connect");
$query = "SELECT semone.userid AS sbuid, semone.semester AS semester,
semone.cname AS name, courses.credit AS value,
courses.progskill AS skill
FROM semone
INNER JOIN courses ON semone.cname = courses.coname" ;
$result = mysqli_query($con,$query)or die ("Unable to connect");
$info = array();
$test = array();
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$row['xyz'] = array(
'name'=> $row['name'],
'value'=> $row['value']
);
$info[$row['semester']]['children'][]= $row['xyz'];
$data = json_encode(array('id' => $row['sbuid'], 'children' => $info));
}
echo $data;
?>
但这正是我所期待的
expected.json
{"id":"12345",
"children":
{"first":
{"children":
[{"name":"CSE101","value":"100"},
{"name":"CSE102","value":"100"}]},
"second":
{"children":
[{"name":"CSE103","value":"50"},
{"name":"CSE104","value":"100"},
{"name":"CSE105","value":"100"}]},
"third":
{"children":
[{"name":"CSE106","value":"50"}]}
}}
{
"id": 12345,
"children":
[{
"semester": "first",
"children":
[{
"name": "C101","value": 100},
{ "name": "C102","value": 100}]
},
{
"semester": "second",
"children":
[{
"name": "C103", "value": 50},
{"name": "C104","value": 100},
{"name": "C105","value": 100}]
},
{
"semester": "third",
"children":
[{"name": "C106","value": 50}]
}
}
将while循环替换为:
$lastId = null;
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$row['xyz'] = array(
'name'=> $row['name'],
'value'=> $row['value']
);
$info[$row['semester']]['semester'] = $row['semester'];
$info[$row['semester']]['children'][]= $row['xyz'];
$lastId = $row['sbuid'];
}
// do not call json_encode on each iteration of the loop
$data = json_encode(array('id' => $lastId, 'children' => array_values($info)));
解释
您希望$row['sement']
是子对象的字段,但您将此值设置为键。您需要使用sement
键(与deepchildren
array并行)显式设置此值,并使用array\u值
在编码之前删除键(关联数组编码为对象,而数字数组编码为数组)
另外,我不想只保存JSON中最后的$row['sbuid']
,也许你想在这里做些不同的事情
阅读有关PHP的更多信息,以及@riggsfully请查看它。我需要它,但无法解决它。您离它不远,首先,我假设您将获得多个用户的数据,因为您对查询没有任何限制。但是您没有代码来处理多个学生或每个学生一个学期以上的问题。因此,这不是一个免费的编码资源,您基本上是在要求别人编写代码,但甚至没有正确解释您的需求或数据库结构。捕猎者会很生气的you@RiggsFolly我明白你的意思,基本上这将是最后一件事,但由于我是编程新手,所以我想一步一步地进行。可能是先获取单个学生的数据,然后获取多个学生的数据。也许我走错了方向。抱歉,我不知道。ID是用ID分隔不同的学生,因为ID在while循环之外,所以无法从数据库中获取值,并且返回“null”值。为了达到这个目的,我认为应该在while循环中使用“id”,只有这样我们才能从数据库中获取它并返回准确的值。