我正在接近从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来获得“长度”和“比尔”部分的正确性,但是..我如何在所有正确的JSON创建代码中插入PHP?
更新:以下原始数据
更新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对象,这是{}
部分。
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
PHP 7代码
<?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));
?>
使用较低的PHP版本的代码删除PHP的return type declarations
以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"
}]
}]
}
为了让你的生活更轻松,我建议你做点什么
$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"]
]
]
]
);