Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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_Json - Fatal编程技术网

PHP中嵌套JSON的问题

PHP中嵌套JSON的问题,php,mysql,json,Php,Mysql,Json,我正接近从MySQL查询中获得JSON,但我遇到了一些困难 $results = []; foreach ($getbill as $row) { $category = $district; $building = $row['building']; if (!isset($results[$category])) {$results[$building] = ['category' => $building, 'values' => []];

我正接近从MySQL查询中获得JSON,但我遇到了一些困难

$results = [];

foreach ($getbill as $row) {
    $category = $district;
    $building = $row['building'];

    if (!isset($results[$category])) 
    {$results[$building] = ['category' => $building, 'values' => []];    }
        $results[$category] = ['category' => $building, 'values' => []];    
            $results[$row['building']]['students'][] = ['lastname' => $row['slast'], 'firstname' => $row['sfirst'], 'ens' => $row['selected'], 'part' => $row['instname'], 'division' => $row['sdiv'], 'festival' => $row['sfest']];
            }

echo json_encode(array_values($results));
上述代码导出:

[{"category":"Belmont Elementary School","values":[],"students":[{"lastname":"jones","firstname":"melissa","ens":"C","part":"Childrens Voice","division":"1","festival":"w"},{"lastname":"smith","firstname":"melissa","ens":"C","part":"Childrens Voice","division":"1","festival":"w"},{"lastname":"b","firstname":"b","ens":"C","part":"Childrens Voice","division":"1","festival":"w"},{"lastname":"b","firstname":"b","ens":"C","part":"Childrens Voice","division":"1","festival":"w"},{"lastname":"chocolate","firstname":"Charlie","ens":"C","part":"Childrens Voice","division":"1","festival":"w"},{"lastname":"Shmow","firstname":"Joe","ens":"C","part":"Childrens Voice","division":"1","festival":"w"},{"lastname":"abrams","firstname":"Alysond","ens":"C","part":"Childrens Voice","division":"1","festival":"w"}]},{"category":"Parliament Place","values":[]},{"students":[{"lastname":"Jones","firstname":"Joe","ens":"B","part":"Trombone","division":"1","festival":"w"},{"lastname":"Smith","firstname":"Ally","ens":"B","part":"Alto Sax","division":"1","festival":"w"}]}]
它是按学校分组的,但是,学校必须在开始时列出,就在学生信息之前。成品需要如下,但我不知所措

{"length":8,"schools":[{"name":"Test High School","students":[{"lastname":"Smith","firstname":"Allison","ens":"Band","part":"Bb Clarinet","division":"III","festival":"West"},{"lastname":"Jones","firstname":"Derek","ens":"Band","part":"Tuba/Sousaphone","division":"III","festival":"West"},{"lastname":"Johnson","firstname":"Matthew","ens":"Band","part":"Timpani","division":"III","festival":"West"},{"lastname":"Hughley","firstname":"Elizabeth","ens":"Band","part":"French Horn","division":"II","festival":"West"}]},{"name":"Test Elementary School","students":[{"lastname":"Jones","firstname":"Emmett","ens":"Band","part":"Bb Clarinet","division":"I","festival":"West"},{"lastname":"Aaren","firstname":"Owen","ens":"Band","part":"Tuba/Sousaphone","division":"I","festival":"West"},{"lastname":"Johns","firstname":"Sonia","ens":"Band","part":"French Horn","division":"I","festival":"West"},{"lastname":"Williams","firstname":"Nathaniel","ens":"Band","part":"Bb Clarinet","division":"I","festival":"West"}]}],"bill":120}
我假设我可以使用PHP变量通过计算查询记录并乘以15来获得正确的“长度”和“账单”部分,但是。。如何在PHP中压缩所有正确的JSON创建代码

更新:原始数据如下

更新2:我明白了。是@Raymond最初的评论让我走上了正确的方向。非常感谢。我必须去掉查询中的一行,并且必须手动“回显”开始和结束(长度和成本)。它起作用了!谢谢大家的帮助

foreach ($getbill as $row) {
    if (!isset($results[$building])) {
        $results[$building] = ['name' => $row['building']];  
        }
        $results[$row['building']]['students'][] = ['lastname' => $row['slast'], 'firstname' => $row['sfirst'], 'ens' => $ens, 'part' => $row['instname'], 'division' => $age, 'festival' => $loc];
}

这个代码示例对您有帮助吗

PHP对象将转换为JSON对象,JSON对象是
{}
部分
PHP数组将被转换为JSON数组,该数组与
[]
部分无关

PHP代码

<?php

$StdClass = new StdClass();
$StdClass->length = 10;
$StdClass->schools = array_values(array(1, 2));

var_dump(json_encode($StdClass));

?>
<?php

class school implements JsonSerializable {
  private $name = null;
  private $students = array();

  private function __construct() {

  }

  public function __destruct() {
      $this->name = null;
      $this->students = null;
  }  

  // Use a static object because it will enable method chaining
  public static function getInstance() {
      return new school();
  }

  public function setName(string $name) : school { 
      $this->name = $name;
      return $this; // needed to chain
  }

  public function setStudent(Student $student) : school { 
      $this->students[] = $student;
      return $this; // needed to chain
  }  

  public function getName() : ?string {
      return $this->name;
  }

  public function getStudents() : ?array {
      return $this->students;
  }  

  public function __get($name) : mixed {
      return $this->name;
  }

  public function jsonSerialize() {
    return array(
        "name" => $this->name
      , "students" => $this->students
    );
  }  
}

class student implements JsonSerializable {
  private $lastname = null; 
  private $firstname = null;

  private function __construct() {

  }

  public function __destruct() {
      $this->lastname = null;
      $this->firstname = null;
  }

  // Use a static object because it will enable method chaining
  public static function getInstance() {
      return new student();
  }  

  public function setLastName(string $lastname) : student { 
      $this->lastname = $lastname;
      return $this; // needed to chain
  }  

  public function setFirstName(string $firstname) : student { 
      $this->firstname = $firstname;
      return $this; // needed to chain
  } 

  public function getFirstName() : ?string {
      return $this->firstname;
  }

  public function getLastName() : ?string {
      return $this->lastname;
  }  

  public function jsonSerialize() {
    return array(
        "lastname" => $this->lastname
      , "firstname" => $this->firstname
    );  
  }
}

$json = new stdClass();
$json->length = 10;


$json->schools = array(
    school::getInstance()
          ->setName('Test High School')
          ->setStudent(
              student::getInstance()
                     ->setFirstname('Smith') 
                     ->setLastname('Allison')
          )
          ->setStudent(
              student::getInstance()
                     ->setFirstname('Jones') 
                     ->setLastname('Derek')
          )          
    , 
    school::getInstance()
          ->setName('Test Elementary School')    
          ->setStudent(
              student::getInstance()
                     ->setFirstname('Jones') 
                     ->setLastname('Emmett')  
         ) 
);

var_dump(json_encode($json));

?>
由于关闭评论而编辑:


谢谢你的快速回复,但遗憾的是,我遇到了一个真正的难题 是时候弄清楚了。此外,还有所有这些“性格” 我无法使用的计数

是的,为学校和学生获取
[{..}]
JSON格式更为棘手
我建议您编写自定义类并使用它将自定义对象转换为JSON

PHP7代码

<?php

$StdClass = new StdClass();
$StdClass->length = 10;
$StdClass->schools = array_values(array(1, 2));

var_dump(json_encode($StdClass));

?>
<?php

class school implements JsonSerializable {
  private $name = null;
  private $students = array();

  private function __construct() {

  }

  public function __destruct() {
      $this->name = null;
      $this->students = null;
  }  

  // Use a static object because it will enable method chaining
  public static function getInstance() {
      return new school();
  }

  public function setName(string $name) : school { 
      $this->name = $name;
      return $this; // needed to chain
  }

  public function setStudent(Student $student) : school { 
      $this->students[] = $student;
      return $this; // needed to chain
  }  

  public function getName() : ?string {
      return $this->name;
  }

  public function getStudents() : ?array {
      return $this->students;
  }  

  public function __get($name) : mixed {
      return $this->name;
  }

  public function jsonSerialize() {
    return array(
        "name" => $this->name
      , "students" => $this->students
    );
  }  
}

class student implements JsonSerializable {
  private $lastname = null; 
  private $firstname = null;

  private function __construct() {

  }

  public function __destruct() {
      $this->lastname = null;
      $this->firstname = null;
  }

  // Use a static object because it will enable method chaining
  public static function getInstance() {
      return new student();
  }  

  public function setLastName(string $lastname) : student { 
      $this->lastname = $lastname;
      return $this; // needed to chain
  }  

  public function setFirstName(string $firstname) : student { 
      $this->firstname = $firstname;
      return $this; // needed to chain
  } 

  public function getFirstName() : ?string {
      return $this->firstname;
  }

  public function getLastName() : ?string {
      return $this->lastname;
  }  

  public function jsonSerialize() {
    return array(
        "lastname" => $this->lastname
      , "firstname" => $this->firstname
    );  
  }
}

$json = new stdClass();
$json->length = 10;


$json->schools = array(
    school::getInstance()
          ->setName('Test High School')
          ->setStudent(
              student::getInstance()
                     ->setFirstname('Smith') 
                     ->setLastname('Allison')
          )
          ->setStudent(
              student::getInstance()
                     ->setFirstname('Jones') 
                     ->setLastname('Derek')
          )          
    , 
    school::getInstance()
          ->setName('Test Elementary School')    
          ->setStudent(
              student::getInstance()
                     ->setFirstname('Jones') 
                     ->setLastname('Emmett')  
         ) 
);

var_dump(json_encode($json));

?>

为了让你的生活更轻松,我建议你做一些

$students_array = []; 
array_push($students_array, ["key"=>"data"]);
要获得与您想要的类似的数组,请查看下面的结构。 等等,对于嵌套的,我想这会有所帮助,请不要犹豫

json_encode(
                [
                    "length"=>/*sizeof($some_array)*/ 2,
                    "schools" =>
                    [
                        "name" => 'test highscool',
                        "students" => [
                            [
                                "lastname" => "Smith",
                                "firstname" => "Allison",
                                "ens" => "Band",
                                "part" => "Bb Clarinet",
                                "division" => "III",
                                "festival" => "West"],
                            [
                                "lastname" => "Jones",
                                "firstname" => "Derek",
                                "ens" => "Band",
                                "part" => "Tuba/Sousaphone",
                                "division" => "III",
                                "festival" => "West"
                            ]
                        ]
                    ],
                    [
                        "name" => 'test highscool_2',
                        "students" => [
                            [
                                "lastname" => "Smith 2",
                                "firstname" => "Allison 2",
                                "ens" => "Band 2",
                                "part" => "Bb Clarinet 2",
                                "division" => "III 2",
                                "festival" => "West 2"]
                        ]
                    ]
                ]
            );

谢谢你的快速回复,但遗憾的是,我很难弄清楚这一点。还有,我无法使用所有这些“字符计数”。@PatrickNY没问题,我会尝试制作一个更好的示例,给我一些时间。不幸的是,我无法让它在mysql表中循环并填充json。json必须非常具体,我正在尝试对其进行反向工程,但遇到了困难。上面是所需的确切代码示例。此外,在某些情况下,需要列出10多栋建筑——每栋都有许多学生。无法理解。“无法理解。”我注意到你接受了解决的答案,我想你已经理解了我的代码是如何完成他的工作的?查看原始数据可能会有帮助谢谢,但你的代码似乎适合静态数据列表。我的必须来自一个MySQL函数,我不知道在代码示例中把变量放在哪里才能使其正常工作。谢谢你的时间和帮助。