2013-01-31 158 views
0

我正在嘗試製作一個Graph(通過Google Charts),它在過去24小時內在我的服務器上顯示用戶活動。用戶活動的數據每隔15分鐘(通過cron)提取並存儲在本地數據庫中。由於數據庫每15分鐘更新一次,因此該圖不是靜態的。在Javascript循環中增加PHP變量

該圖顯然需要一些數字作爲輸入以便繪製。這裏是JavaScript作品的一個簡單的例子:

dataTable.setValue(0, 0, 0); 
dataTable.setValue(1, 0, 25.0); 
dataTable.setValue(2, 0, 50.0); 
dataTable.setValue(3, 0, 75.0); 
dataTable.setValue(4, 0, 100.0); 

上面的代碼將繪製的對角線從(X,Y)=(0,0),並且在(X,Y)=結束(4100)

所以我現在要做的是做96次循環(每15分鐘更新24小時= 15 x 24 = 96)。

因此,這裏是我的嘗試:

for(x=0;x<96;x++){ //copy PHP array into javascript array 
    javaArray[x] = <?php echo $sqlArray[$count]['clients_online'];?>; 
    <?php $cnt++; ?> 
} 
for (var x=0;x<96;x++){ //draw graph 
     dataTable.setValue(x, 0, javaArray[x]); 
} 

在第一次for循環,我從PHP數組傳遞數據(從數據庫中獲取)成JavaScript數組。完成後,我在第二個for循環中繪製圖形。

$ count變量在for循環內正確增加,但我的問題是它在每個循環後重置

我知道PHP是服務器端,而javascript是客戶端,因此問題,但我該如何解決這個問題?

謝謝。

+0

爲什麼所有的計數變量?您可以將服務器端PHP數組傳遞給JavaScript,並使用JSON'<?php $ arr = array(1,2,3,4); ?>/* Javascript */js_arr = JSON.parse(<?php json_encode($ arr);?>);'。從問題中提供的信息中,我無​​法確定哪個計數變量正在改變;但我看到一個PHP數量變量沒有被傳遞給JavaScript,是嗎? –

+0

15 x 24!= 96,你想說的是4 * 24 = 96或者爲了更簡單的理解60/15 * 24 –

回答

1

您可以循環訪問$sqlArray,將密鑰用作計數器,並在每次迭代中輸出js。

<?php 
foreach($sqlArray as $count => $val) 
{ 
?> 
    dataTable.setValue(<?php echo $count; ?>,0,<?php echo $val['clients_online']; ?>); 
<?php 
} 
?> 

這將工作提供了類似下面

Array 
(
    [0] => Array 
    (
     [clients_online] => 44 
    ) 

    ... 
    [95] => Array 
    (
     [clients_online] => 66 
    ) 

和你預期的輸出數組數據應該是這樣的

dataTable.setValue(0,0,44); 
    ... 
    dataTable.setValue(95,0,66); 
+0

非常感謝!它像一個魅力一樣工作! – Chris

0

首先,我建議有實際存儲在數據庫中的時間(因此谷歌圖表也理解它,並可以繪製軸)。但是,要解決你的數據從PHP傳遞給JS問題,你可以只json_encode你的陣列,它傳遞給使用Javascript,如:

<?php 
    $data = array (
    array('Iterator', 'Visitors'), 
    array(1, 25), 
    array(2, 23), 
    array(3, 17), 
    array(4, 22), 
    array(5, 15), 
    array(6, 19), 
    array(7, 17), 
    array(8, 19), 
); 
?> 

而且JS/HTML側

var dataTable = <?= json_encode($data); ?>; // <?= is short for <?php echo - always available from 5.4 

google.load("visualization", "1", { 
    packages: ["corechart"] 
}); 
google.setOnLoadCallback(drawChart); 

function drawChart() { 

    var data = google.visualization.arrayToDataTable(dataArray); 

    var options = { 
     title: 'Visitors by 15min iterator' 
    }; 

    var chart = new google.visualization.LineChart(document.getElementById('chart_div')); 
    chart.draw(data, options); 
} 

的jsfiddle例子是在這裏:http://jsfiddle.net/hTKGK/1/

1

對於這些類型的事情,最好做一個Ajax調用。這允許解耦前端和後端代碼,這是您首先關注的問題之一。

以下是可用於轉儲變量的PHP。我們稱之爲ajax-data-table.php。如果你的sqlArray有不同的佈局,你可以相應地改變它。

<?php 

$sqlArray = array(
    0 => 0.0, 
    1 => 25.0, 
    2 => 50.0, 
    3 => 75.0, 
    4 => 100.0, 
); 

echo json_encode($sqlArray, JSON_FORCE_OBJECT); 

當它使得它看起來就像這樣:

{"0":0,"1":25,"2":50,"3":75,"4":100} 

然後,您可以用JS做使用AJAX調用。假設你有jQuery:

request = $.getJSON('ajax-data-table.php'); 
var dataTable = request.responseText.evalJSON();