在Javascript循环中增加PHP变量

时间:2013-01-31 21:23:01

标签: php javascript variables loops reset

我正在尝试创建一个图表(通过Google图表),显示过去24小时内我的服务器上的用户活动。用户活动的数据每15分钟(通过cron)获取并存储在本地数据库中。由于数据库每15分钟更新一次,因此图表不是静态的。

图表显然需要一些数字作为输入才能绘制。这是一个简单的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)=(4,100)结束

所以我现在要做的是做一个循环96次(24小时每15分钟一次更新= 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-loop中,我将数据(从数据库中提取)从PHP数组传递到javascript数组。完成后,我在第二个for循环中绘制图形。

$ count变量在for循环中正确递增但我的问题是它在每次循环后重置

我意识到PHP是服务器端,而javascript是客户端因此问题,但我该如何解决这个问题?

感谢。

3 个答案:

答案 0 :(得分: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);

答案 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();

答案 2 :(得分:0)

首先,我建议将实际时间存储在数据库中(因此Google图表也能理解它并且可以绘制轴)。但是要解决从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/