将PHP数组转换为javascript数组,传递给jQuery.flot进行绘图

Turn PHP array into javascript array to pass to jQuery.flot for charting

本文关键字:数组 jQuery flot 绘图 转换 PHP javascript      更新时间:2023-09-26

我一直在逐步构建一个PHP页面,这样我就可以确认每一块都能正常工作,等等。我还有JS中的罐装数据,这些数据被传递给jQuery.flot,用于创建堆叠条形图。

基本上,我已经完成了所有的工作,但现在,我对如何将PHP数组输出到JS数组感到困惑。不管我做什么似乎都不起作用。

我需要我的js数组显示如下:

var Tim_data1 = [
    [Tim_gd(2014,1,1),13], [Tim_gd(2014,1,2),30], etc., etc.
];

"Tim_gd"函数将传递的值转换为unix日期/时间。此图表按日期绘制随时间变化的数据。因此,js数组的每个元素都是Tim_gd(,,),]。由于数据量的原因,将为每个月等创建此图表。

概述:

  1. 值是通过mysql-select在同一PHP代码中检索的,这不是来自Ajax,也不是来自其他外部源
  2. 选择中返回的行包含日期(以YYYY-MM-DD的形式)以及具有该日期的记录数
  3. 我一次只做一个月的图表

创建数组的PHP代码片段:

<?php
    $chartdata = array();
.
.
.
$result2 = mysql_query( $query2 ) or die(mysql_error());  
while ($row2 = mysql_fetch_array($result2)) {
    $event_date = $row2['event_date'];     // date returned as string, YYYY-MM-DD
    $event_count = $row2['event_count'];
    // Build up php array
    $chartdata[$event_date] = $event_count;
}

我已经使用PHP"foreach"将上述数据输出到一个HTML表中,所以我知道我正在获取值等。我应该也可以使用PHP substr函数来获取日期的组成部分,以提取年、月、日。创建/输出javascript的代码如下:

<script type="text/javascript">
    var TimData1 =[ 
<?php        
    foreach ($chartdata as $k => $v) {
    $yr = substr($k,0,4);
    $day = substr($k,5,2);
    $mon = substr($k,8,2);
 $HTML = <<< eof
    [Tim_gd($yr,$mon,$day),$v],
 eof;
}
?>
];
</script>

通过上面的PHP代码片段,我得到的输出只有:

<script type="text/javascript">
    var TimData1 =[ 
    ];
</script>

没有数据输出。。。。我也尝试过使用PHP echo,但也没有成功。我提前道歉,因为我知道这很简单,但过去几天我一直在用消防水管喝水,试图同时解决多个问题。我已经为此困惑了好几个小时,似乎还没有找到解决办法。

那么,我做错了什么?我知道我会遇到js数组中尾部逗号的问题,用上面概述的方法也可以解决。

或者有没有一种方法可以将JSON数据传递给jQuery.flot,这会影响传递给.plot函数的"选项"吗?我似乎找不到一个相关的例子。这并不意味着它不存在——我只是还没有找到它。

为什么不使用两种语言都能处理的JSON格式?

你可以这样做:

<?php 
$chartJSON = json_encode($chartdata);
?>
<script type="text/javascript">
    json = "<?php echo $chartJSON;?>";
    var TimData1 = JSON.parse(json);
</script>