我即将从一个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变量来获得“长度”和"Bill“部分的正确性,方法是计算查询的记录并乘以15,但是。如何在PHP中插入所有正确的JSON创建代码?
更新:以下原始数据

更新2:我想明白了。正是来自“雷蒙德”的最初评论让我走上了正确的道路。谢谢。我不得不删除我的查询的一行,我不得不手动“回显”开始和结束(长度和成本)。起作用了!谢谢你们的帮助。
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];
}发布于 2019-02-14 20:19:00
这个代码示例对您有帮助吗?
PHP对象将被转换为JSON对象,这是{}部件。
PHP数组将被转换为JSON,这与[]部件无关。
PHP代码
<?php
$StdClass = new StdClass();
$StdClass->length = 10;
$StdClass->schools = array_values(array(1, 2));
var_dump(json_encode($StdClass));
?>结果
string(29) "{"length":10,"schools":[1,2]}"编辑是因为取消评论:
谢谢你的快速答复,但遗憾的是,我很难弄明白这一点。此外,还有所有这些‘字符计数’,我不能使用。
是的,对于学校和学生来说,获得[{..}] JSON格式要复杂得多。
我建议您编写自定义类,并使用JsonSerializable将自定义对象转换为JSON
PHP7代码
<?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));
?>p.s使代码在较低的PHP版本上工作,删除PHP的返回类型声明
的结果是这种JSON格式
{
"length": 10,
"schools": [{
"name": "Test High School",
"students": [{
"lastname": "Allison",
"firstname": "Smith"
}, {
"lastname": "Derek",
"firstname": "Jones"
}]
}, {
"name": "Test Elementary School",
"students": [{
"lastname": "Emmett",
"firstname": "Jones"
}]
}]
}发布于 2019-02-14 20:36:05
为了让你的生活更轻松,我建议你做一些事情
$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"]
]
]
]
);https://stackoverflow.com/questions/54698349
复制相似问题