2013-08-06 202 views
1

我想用數據庫做一些數據可視化。複雜的嵌套循環

起初我使用morris.js,這對我的數據非常有用。我會在之後解釋更多。 現在我試圖用d3.js,因爲我要創建水平堆疊條形,多個圖表行,以及更多...

這是我的表:http://d.pr/i/ooDN (我沒有10分的聲譽,我可以不要發佈我的照片)

我必須在圖表上繪製5條不同的線條。 「Heure」是x軸,其他列是不同的線。

莫里斯,我的數據均是這樣的(在.PHP結束在JSON r_print [{"x":"1","a":"34","b":"15","c":"49","d":"15","e":"3"}, {"x":"2","a":"36","b":"13","c":"49","d":"12","e":"2"}, … ]

其中x是時間數據(與x軸和自動曝光信件是別人線圓點每個小時)

但隨着d3.js,這些陣列不工作了,我必須改變我的PHP來獲得這樣的事情:

[{"x": 1, "y": 5}, { "x": 2, "y": 20}, { "x": 3, "y": 10}, … , { "x": 23, "y": 60}]

[{"x": 1, "y": 13}, { "x": 2, "y": 14}, { "x": 3, "y": 5}, … , { "x": 23, "y": 48}]

其中每行是不同的列。

這是我的PHP:

<?php include 'connexion.php' ?> 

<?php 
////////////////// out_evo_tat 
$requete = $db->prepare('SELECT * FROM out_evo_tat'); 
$requete->execute(); 

while($row = $requete->fetch()) { 

    // $tableau[]=array('x'=>$row['Heure'],'a'=>$row['TAT_CHAINE'],'b'=>$row['TAT_PREA'],'c'=>$row['TAT_GLOBAL'],'d'=>$row['NBR_TESTS'], 'e'=>$row['NBR_TUBES']); 
    // $tableau[]=array($row['Heure'],$row['TAT_CHAINE'],$row['TAT_PREA'],$row['TAT_GLOBAL'],$row['NBR_TESTS'], $row['NBR_TUBES']); 

    $tableau[]= array (
     array($row['Heure'],$row['TAT_CHAINE']), 
     array($row['Heure'], $row['TAT_PREA']), 
     array($row['Heure'], $row['TAT_GLOBAL']), 
     array($row['Heure'], $row['NBR_TESTS']), 
     array($row['Heure'], $row['NBR_TUBES']) 
     ); 
} 

echo json_encode($tableau); 

?> 

如何修改上面這段代碼以獲得與d3.js可用的東西嗎?

我想我必須使用嵌套循環,但我不能獨自解決這個問題...

我試圖解釋它的最簡單的方式,但它也許是很難理解,因爲我解釋,所以不要猶豫,問我更多。

謝謝

回答

0

一旦你生成你的陣列如圖PHP代碼,下面將使用數組產生JSON字符串數組:

array_unshift($tableau, null); 
$tableau = call_user_func_array('array_map', $tableau); 
$json = array(); 
foreach ($tableau as $key => $val){ 
    $out = array(); 
    foreach ($val as $key2 => $val2){ 
     $item = new stdClass; 
     $item->x = $val2[0]; 
     $item->y = $val2[1]; 
     $out[] = $item; 
    } 
    $json[] = json_encode($out); 
} 
print_r($json); 

輸出:

Array 
(
    [0] => [{"x":0,"y":35},{"x":1,"y":34},{"x":2,"y":36},{"x":3,"y":35}] 
    [1] => [{"x":0,"y":10},{"x":1,"y":15},{"x":2,"y":13},{"x":3,"y":15}] 
    [2] => [{"x":0,"y":45},{"x":1,"y":49},{"x":2,"y":49},{"x":3,"y":50}] 
    [3] => [{"x":0,"y":10},{"x":1,"y":15},{"x":2,"y":12},{"x":3,"y":5}] 
    [4] => [{"x":0,"y":2},{"x":1,"y":3},{"x":2,"y":2},{"x":3,"y":1}] 
) 
+0

謝謝!我懷疑第一面,但這個工程!但現在我明白瞭如何工作D3 ... – MathieuLuyten

+0

不客氣。代碼的前兩行做了一個矩陣變換,它本質上將矩陣變成了一邊。在使用數組時,這是非常有用的操作。 –

+0

我會記住這一點,非常感謝。你知道d3.js嗎?我遇到了更多的問題,我是否應該在這裏問他們(因爲我使用那些顯示的數據)還是應該創建另一個帖子? – MathieuLuyten