2016-12-17 23 views
0

當我將數組作爲參數傳遞給圖表時,它會停止在網頁 頁面上顯示。圖表標籤和php數組中的數據

<?php 
$f = fopen("C:\wamp64\www\dashb\CSV\salespermonthdollars.csv", "r"); 
$labels = array(); 
$data = array(); 
$loopCounter = 0; 
while (($line = fgetcsv($f)) !== false) { 
    if($loopCounter == 0){ 
    // this if is to skip the first row or the columns 
    } else { 
    array_push($labels,$line[0]); 
    array_push($data,$line[1]); 
    } 
    $loopCounter = $loopCounter + 1; 
} 
fclose($f); 
?> 

所以上面我讀的CSV文件,我從我的查詢結果保存,並嘗試繪製它在圖表上:

<canvas id="myChart2"> 
<script> 
$array3 = [1,2,3,4,5,5,41]; 
$array4 = [1,2,3,4,5,5,41]; 
var ctx = document.getElementById('myChart2').getContext('2d'); 
var myBarChart = new Chart(ctx, { 
    type: 'bar', 
    data: { 
    labels: $array3, //when i change this to $labels doesn't work same for4 
    datasets: [{ 
     label: 'label', 
     data: $array4, 
     backgroundColor: "rgba(100,255,51,0.4)" 
    }] 
    } 
    }); 
</script> 
</canvas> 

主要是我在圖表上顯示查詢結果。我執行,保存到csv並從那裏讀取

任何改進方法的建議都是值得歡迎的,不知怎的,我覺得它可以做得比這更容易。

+0

沒有錯誤或什麼這樣的順便說一句。感覺像一個版本問題,或者它只是一個壞的方法 – TrackmeifYouCan

回答

1

這是因爲$labels不是Javascript,而是PHP變量。所以,你需要做的是在你的代碼的PHP部分解碼:

... 
fclose($f); 
$labels = json_decode($label); 

而且在Javascript部分:

var labels = JSON.parse("<?php echo $labels; ?>"); 

由於改進建議部分去,you should not declare global variables。所以,你在這裏做什麼:

$array3 = [1,2,3,4,5,5,41]; 
$array4 = [1,2,3,4,5,5,41]; 

應該是:

var array3 = [1,2,3,4,5,5,41]; 
var array4 = [1,2,3,4,5,5,41]; 

我刪除$ - 美元從他們的名字,因爲it's common practice to declare jQuery wrapper variables和那些顯然不是。此外,通過$前綴他們的名字,我只能猜測,你想要做的是聲明PHP變量您<script>內,然後直接使用它們,但是不可能,因爲首先,你缺少<?php第二部分 - 他們只會通過聲明將它們保存在內存中。

+0

所以也許我應該完全用JavaScript做到這一點?在這種情況下使用php有沒有好處?我只是因爲這是我發現執行查詢的第一件事,只是從那裏拿走它。 – TrackmeifYouCan

+0

如果不使用服務器端語言(例如php),您將無法完成此操作,因爲您無法讀取客戶端上的文件,也無法在服務器端創建圖表。使用兩者是一個關鍵,爲此,只要確保你做對了。 – wscourge

+0

謝謝。現在工作正常,我現在將添加一些按鈕來在需要時更新查詢。想要使用這些開源儀表板框架中的一些,但它們確實看起來像一個矯枉過正的東西,所以我只是舉例說明它們。 – TrackmeifYouCan