繁体   English   中英

PHP数组json格式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM