[英]PHP Array json format
我做了一个函数,从数据库表中检索一些信息并将其存储在数组中,然后需要将其编码为json特定格式。 这是功能:
public function json() {
$query = "SELECT ax.nome as auxiliar, t.assiduidade, t.normas,
t.eficiencia, t.relacionamento, t.iniciativa,
t.visao, (
SELECT truncate(avg(t.assiduidade + t.normas + t.eficiencia + t.relacionamento + t.iniciativa + t.visao)/6, 2)
FROM topico t
WHERE a.id = t.idAval
) AS media
FROM avaliacao a
INNER JOIN supervisor s ON a.supervisor_id = s.id
INNER JOIN auxiliar ax ON a.auxiliar_id = ax.id
INNER JOIN departamento d ON a.departamento_id = d.id
inner join topico t on a.id = t.idAval
WHERE a.departamento_id = ?
and date(a.data) between ? and last_day(?)";
$stmt = $this->conn->prepare($query);
$info["aval"] = array();
$stmt->bindParam(1, $this->departamento);
$stmt->bindParam(2, $this->data);
$stmt->bindParam(3, $this->data);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
extract($row);
$info2 = ['name' => $auxiliar, 'y' => $media, 'drilldown' => $auxiliar, 'data' => [['assiduidade', floatval($assiduidade)], ['normas', floatval($normas)], ['eficiencia', floatval($eficiencia)], ['relacionamento', floatval($relacionamento)], ['iniciativa', floatval($iniciativa)], ['visao', floatval($visao)]]];
array_push($info, $info2);
}
//var_dump($info);
$fp = fopen('data.json', "w");
fwrite($fp, json_encode($info, JSON_PRETTY_PRINT));
fclose($fp);
}
这是data.json的输出:
{
"aval": [
],
"0": {
"name": "Isratshawatt Sousa",
"y": "7.83",
"drilldown": "Isratshawatt Sousa",
"data": [
[
"assiduidade",
8
],
[
"normas",
7
],
[
"eficiencia",
8
],
[
"relacionamento",
9
],
[
"iniciativa",
6
],
[
"visao",
9
]
]
},
"1": {
"name": "Jo\u00e3o Batista J\u00fanior",
"y": "7.85",
"drilldown": "Jo\u00e3o Batista J\u00fanior",
"data": [
[
"assiduidade",
9.8
],
[
"normas",
7.5
],
[
"eficiencia",
8.8
],
[
"relacionamento",
6.6
],
[
"iniciativa",
5.5
],
[
"visao",
8.9
]
]
} }
这是我需要的格式:
{
"aval": [
{
"name": "Isratshawatt Sousa",
"y": "7.83",
"drilldown": "Isratshawatt Sousa",
"data": [
[
"assiduidade",
8
],
[
"normas",
7
],
[
"eficiencia",
8
],
[
"relacionamento",
9
],
[
"iniciativa",
6
],
[
"visao",
9
]
]
},
{
"name": "Jo\u00e3o Batista J\u00fanior",
"y": "7.85",
"drilldown": "Jo\u00e3o Batista J\u00fanior",
"data": [
[
"assiduidade",
9.8
],
[
"normas",
7.5
],
[
"eficiencia",
8.8
],
[
"relacionamento",
6.6
],
[
"iniciativa",
5.5
],
[
"visao",
8.9
]
}
]
}
我的问题是如何格式化$ info数组以重现上面的json格式?
您正在使用array_push与错误的数组。 如果要将项目添加到“ aval”,则可以这样更改代码:
public function json() {
$query = "SELECT ax.nome as auxiliar, t.assiduidade, t.normas, t.eficiencia, t.relacionamento, t.iniciativa, t.visao, ( SELECT truncate(avg(t.assiduidade + t.normas + t.eficiencia + t.relacionamento + t.iniciativa + t.visao)/6, 2) FROM topico t WHERE a.id = t.idAval ) AS media FROM avaliacao a INNER JOIN supervisor s ON a.supervisor_id = s.id INNER JOIN auxiliar ax ON a.auxiliar_id = ax.id INNER JOIN departamento d ON a.departamento_id = d.id inner join topico t on a.id = t.idAval WHERE a.departamento_id = ?
and date(a.data) between ? and last_day(?)";
$stmt = $this->conn->prepare($query);
$info["aval"] = array();
$stmt->bindParam(1, $this->departamento);
$stmt->bindParam(2, $this->data);
$stmt->bindParam(3, $this->data);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
extract($row);
$info2 = ['name' => $auxiliar, 'y' => $media, 'drilldown' => $auxiliar, 'data' => [['assiduidade', floatval($assiduidade)], ['normas', floatval($normas)], ['eficiencia', floatval($eficiencia)], ['relacionamento', floatval($relacionamento)], ['iniciativa', floatval($iniciativa)], ['visao', floatval($visao)]]];
$info["aval"][] = $info2;
}
$fp = fopen('data.json', "w");
fwrite($fp, json_encode($info, JSON_PRETTY_PRINT));
fclose($fp);
}
注意行
$info["aval"][] = $info2;
而且,使用array []代替array_push会更快一点,因为没有执行任何函数调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.