2016-04-16 65 views
0

我做了一個函數從數據庫表中檢索一些信息並將其存儲在數組中,然後我需要使用json特定的格式對其進行編碼。 這是函數:PHP Array 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格式?

+0

如果你有過使用'extract' **的衝動,直到MADNESS通過**這會做同樣的事情'$ info2 [] = $ row;'如果你有名稱的列使用作爲'你想要他們在你的JSON的方式 – RiggsFolly

+0

我想我理解你,關鍵是我需要這種JSON格式才能生成圖表。 – kelsen

回答

2

您正在使用陣列錯誤的array_push。如果你想要添加項目「票據背書擔保」,你可以改變你這樣的代碼:

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_push是有點快,因爲沒有執行函數調用。

+0

完美!似乎我不需要初始化數組呢? '$ info [「aval」] = array();' – kelsen

+0

這取決於您的應用邏輯。如果你沒有初始化數組,並且由於某種原因,查詢將返回零行,那麼你將得到結果JSON,如'{「aval」:null}'可能最好在這種情況下有空數組:'{「aval」: []}'。 – Andrew