Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PhP编码中的复杂嵌套JSON数组_Php_Mysql_Arrays_Json - Fatal编程技术网

PhP编码中的复杂嵌套JSON数组

PhP编码中的复杂嵌套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

我已经从数据库中创建了一个JSON文件,它有两个属性为id、semone、sement、cname的表,以及属性为coname和credit的表courses

我用php编写的代码如下

main.php

<?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
键(与deep
children
array并行)显式设置此值,并使用
array\u值
在编码之前删除键(关联数组编码为对象,而数字数组编码为数组)

另外,我不想只保存JSON中最后的
$row['sbuid']
,也许你想在这里做些不同的事情


阅读有关PHP的更多信息,以及

@riggsfully请查看它。我需要它,但无法解决它。您离它不远,首先,我假设您将获得多个用户的数据,因为您对查询没有任何限制。但是您没有代码来处理多个学生或每个学生一个学期以上的问题。因此,这不是一个免费的编码资源,您基本上是在要求别人编写代码,但甚至没有正确解释您的需求或数据库结构。捕猎者会很生气的you@RiggsFolly我明白你的意思,基本上这将是最后一件事,但由于我是编程新手,所以我想一步一步地进行。可能是先获取单个学生的数据,然后获取多个学生的数据。也许我走错了方向。抱歉,我不知道。ID是用ID分隔不同的学生,因为ID在while循环之外,所以无法从数据库中获取值,并且返回“null”值。为了达到这个目的,我认为应该在while循环中使用“id”,只有这样我们才能从数据库中获取它并返回准确的值。