2013-04-20 18 views
0

我正在嘗試爲公司Intranet網頁設置一些簡單的Amcharts圖。在過去的兩週裏,我創建了HTML/JS,並使用Amcharts製作了一個漂亮的圖形(HTML中用於演示的硬編碼數據)。我還安裝了XAMPP並創建了一個MySQL數據庫,裏面填充了表格和一些從csv文件導入的數據。從MySQL填充PHP數組以供Amcharts使用

到目前爲止,一切工作正常 - 我可以顯示漂亮的圖形,我可以收集數據以提供數據到圖形。但是,我一直在從兩端處理這個問題(將源數據存入數據庫並將數據顯示在網頁上的圖表中)。現在我需要加入這兩個端點,所以我可以使用來自MySQL的數據提供Amcharts。

我知道我需要使用PHP從MySQL獲取數據,並將其放入可以被Amcharts使用的數組中,但我的PHP知識非常基礎,而且我正在爲代碼苦苦掙扎。

我所擁有的是成功連接到MySQL並提取數據以在瀏覽器中顯示的PHP代碼。我只是不知道如何將這些數據轉換成Amcharts繪製圖形所需格式的多維數組。

如果你們可以給我一些幫助並填寫缺失的部分,這將是非常好的。我有一些關於創建數組邏輯的僞代碼作爲'真實'php代碼的基礎。

這是用於填充所述陣列的僞代碼:

;字符集= UTF-8' , '', '',陣列(PDO :: ATTR_EMULATE_PREPARES =>假, PDO :: ATTR_ERRMODE = > PDO :: ERRMODE_EXCEPTION));

$stmt = $db->query("SELECT * FROM <mytable> WHERE <mycondition>"); 

$prevweek = "9999"; 
$headrowdone = 0; 

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    if ($prevweek < $row['WeekNumber']) { 
     // New week so write out Category X Label ('Week') with the week number of the following data rows 
     chartData.push($DataRow); 
     $headrowdone = 0; 
    } 
    if (!$headrowdone) { 
     $DataRow = "Week: "+$row['WeekNumber']; 
     $headrowdone = 1; 
    } 
    // Write out the X-Axis Category value and the Y-Axis value 
    $DataRow = $DataRow+$row['XAxisCategory']+": "+$row['YAxisCategory']; 
    $prevweek = $row['WeekNumber']; 
} 
chartData.push($DataRow); ?> 

的SQL表看起來像:

CREATE TABLE(WeekNumber VARCHAR(4),XAxisCategory VARCHAR(50),YAxisValue整數); '1301','A',10'1301','B',20'1301','C',24 '1302','A',11'1302','11''',' 'B',22'1302','C',27'1303','A',14'1303','B',23 '1303','C',28 ...等

爲amcharts數據陣列需要看起來像:

變種chartData = [{周: 「1301」, A:10, B:20, C:24 },{ 周: 「1302」, 甲:11, B:22, C:27 },{ 周: 「1303」, 甲:14, B:23, C:28 ....等 }];

回答

2
// This is spoofing your fetch via pdo 
$rows [] = array('WeekNumber'=>1301, 'A'=>10); 
$rows [] = array('WeekNumber'=>1301, 'B'=>20); 
$rows [] = array('WeekNumber'=>1301, 'C'=>25); 

$rows [] = array('WeekNumber'=>1302, 'A'=>12); 
$rows [] = array('WeekNumber'=>1302, 'B'=>22); 
$rows [] = array('WeekNumber'=>1302, 'C'=>27); 
//var_dump($rows); 

// set up some vars 
$lastweek = ''; 
$ctr = 0; 
$data = array(); 


// loop thru the vars, build another array 
foreach($rows as $row){ 

if($row['WeekNumber'] !== $lastweek){ 
    $ctr++; 
    $data[$ctr] = array('Week'=>$row['WeekNumber']); 
    $lastweek= $row['WeekNumber']; 
} 
// this could be nicer, but for now will do 
if(isset($row['A'])) $data[$ctr]['A'] = $row['A']; 
if(isset($row['B'])) $data[$ctr]['B'] = $row['B']; 
if(isset($row['C'])) $data[$ctr]['C'] = $row['C']; 

} 

var_dump($data); 

然後使用json_encode()來獲取成你想要的格式。

這個答案有點遺憾,但至少遠離構建字符串來製作json。

+0

'json_encode'是你想說的功能;) – 2013-04-22 15:34:09

+1

編輯答案,好點,thx。 – Cups 2013-04-22 16:10:41