1

在我的控制器中,我创建了要绘制的数组

function chart() {  
    $results = $this->Visit->query(
        "SELECT date(visits.created) as visit_date, 
            Count(visits.id) AS count_visits
            FROM visits
            GROUP BY date(visits.created)"
    );

    foreach($results AS $result) {
        $row = array(
            $result[0]['visit_date'],
            $result[0]['count_visits']          
        );
        $chartData[] = json_encode($row);
    }

    pr($chartData);

}

pr($chartData) 给出以下数组

Array
 (
    [0] => ["2012-07-11","5"]
    [1] => ["2012-07-13","1"]
    [2] => ["2012-07-14","1"]
)

在图表视图中我有

google.load('visualization', '1.0', {'packages':['corechart']});

google.setOnLoadCallback(drawChart);

function drawChart() {
    // Create the data table.

    var data = google.visualization.arrayToDataTable($chartData);

    var options = {
      title: 'Visits by Date',
      hAxis: {title: 'Date', titleTextStyle: {color: 'black'}}
    };

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

但这并没有给我一个图表..没有错误......只是没有图表..

如果我手动输入一个数组来测试我的视图,它工作正常......例如,如果我替换..

var data = google.visualization.arrayToDataTable($chartData);

使用 Google Chart 示例中的以下格式,它会生成一个漂亮的柱形图

    var data = google.visualization.arrayToDataTable([
              ['Date',  'Count'],  
      ['2012-07-11',  5],
      ['2012-07-13',  1],
      ['2012-07-14',  1]
    ]);

几个问题: - 我如何获得 var 数据数组中的标题?- 数组中的双引号或单引号会有所不同吗?- 我是否将数组 $chartData 从 php 正确传递到 Google 图表 javascript?- 谷歌示例在数组周围有“[]”,我如何在我的数组周围也有这些?

(顺便说一句,我知道所有关于 cakephp 的 Find(all) 的信息,但我只是迷失在关于如何获得我想要的东西的文档中,而且 sql 更容易)

4

1 回答 1

0

您在控制器中使用 json_encode,但在您看来,您正在使用 -

google.visualization.arrayToDataTable($chartData);

json_encode 创建 json 对象,而不是 javascript 数组。

在控制器功能 chart() 中使用 json_encode 尝试:

$chartData['cols'] = array(
    array('id' => 'visit_date', 'label' => 'Visit date', 'type' => 'date'),
    array('id' => 'count_visits', 'label' => 'Count', 'type' => 'number')
);
foreach($results AS $result) {
    $time = strtotime($result[0]['visit_date']);
    $dateJs = 'Date('.date("Y", $time).', '.(date('n', $time) - 1).', '.date('j', $time).')';
    $row = array(
        'c' => array(
            array('v' => $dateJs),
            array('v' => $result[0]['count_visits']),
         )
    );
    $chartData['rows'][] = $row;
}
//make the data available for view
$this->set('chartData', json_encode($chartData);

在您看来使用:

var data = new google.visualization.DataTable($chartData);
于 2012-08-07T10:12:17.750 回答