如何动态填充谷歌图表API


How to populate Google chart API dynamically

我正在尝试使用他们的API和JSON创建一个Google折线图。

硬编码,此图表有效:

<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
  function drawChart() {
    var data = google.visualization.arrayToDataTable([
      ['Date', 'Sales'],
      ['Jun 25',  12.25],
      ['Jun 26',  8.00],
      ['Jun 27',  20.50]
      ['Jun 28',  12.75]
    ]);
    var options = {
    };
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
</script>

但是,尝试使用 JSON 填充它,我无法让它工作:

<?php
$data = array();
$data["Date"] = "Sales";
$data["Jun 25"] = "12.25";
$data["Jun 26"] = "8.00";
$data["Jun 27"] = "20.50";
$data["Jun 28"] = "12.75";
$data = json_encode($data);
?>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
  function drawChart() {
    var data = google.visualization.arrayToDataTable(<?php echo $data; ?>);
    var options = {
    };
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
</script>

我显然没有正确编码数组。Google有一个示例页面,介绍如何使用JSON数据填充图表:https://developers.google.com/chart/interactive/docs/php_example

但是,我找不到有关如何使用像这样的简单折线图设置 JSON 数据的任何示例。

你很接近。

$data = array( 
             array('Date', 'Sales'),  
             array('June 25', 12.25),  
             array('June 26', 8.00) 
);
json_encode($data);

输出

[["Date","Sales"],["June 25",12.25],["June 26",8]]

看到它的实际效果。

Josh已经提供了正确的答案。但是如果你想使用 google.visualization.DataTable 而不是 google.visualization.arrayToDataTable ,首先你可以单独添加列,然后添加 json 编码的 php 数组:

var data = new google.visualization.DataTable();
    data.addColumn('string', 'Date');
    data.addColumn('string', 'Sales');
    data.addRows(<?php echo $data; ?>);
while($fetch = sqlsrv_fetch_array( $result, SQLSRV_FETCH_BOTH))
{
$grid[$count]= $fetch['Hour'];
$grid1[$count]=$fetch['Revenue'];
$data[$count]=array($fetch['Hour'],$fetch['Revenue']);
$count++;   
}
$num=$count;
    $data[0] = array('Hours','Revenue');        
    for ($i=0; $i<($num+1); $i++)
    {
        $data[$i]=(array('c' => array(array('v' => (string)$grid[$i]), array('v' =>(int)($grid1[$i]) ), ) ));
    }   
$sample=array(array('type' => 'string', 'label' => 'date'),array('type' => 'number', 'label' => 'Amount'));
$table['cols'] = $sample;
$table['rows'] = $data;
echo (json_encode($table ));

这对我有用,如果你这样格式化你的json,它肯定会起作用