使用多维PHP数组填充Google组合图表

时间:2014-06-18 14:02:54

标签: php arrays multidimensional-array google-visualization json

我有一个包含学生数据的php数组。它看起来像这样:

array(5) {
    ["question1"]=>
        array(30) {
            ["2014, 03, 02"]=>
                array(10) {
                    ["student1"]=>
                    int(54)
                    ["student2"]=>
                    int(43)
                    ... etc. ...
                    ["median"]=>
                    string(2) "49"
}

每天,学生回答五个问题,其值为1到100.每天计算单个问题的所有答案的中值。答案和中值如上所述存储。

现在我想用这些数据填充Google Charts组合图表,但我无法让它工作。

我想用X轴上的日期,Y轴上的1-100值和每个答案作为一个点来显示数据。中值的数据应显示为点上的曲线。每个问题的点和曲线应该有自己的颜色。

但我几乎陷入困境。我无法弄清楚如何插入数据。我尝试过这种方法:

var jsonData = (<?= json_encode($data)?>);
var data = new google.visualization.arrayToDataTable(jsonData);

但我只收到以下错误消息:

Uncaught Error: Not an array    format+da,default+da,ui+da,corechart+da.I.js:181
lda    format+da,default+da,ui+da,corechart+da.I.js:181
Gp    format+da,default+da,ui+da,corechart+da.I.js:183
drawChart    ?side=graf:4888

1 个答案:

答案 0 :(得分:0)

您需要更改数据的格式。 Visualization API需要表格格式的数据,其中x轴数据位于第一列,每个数据系列(一组彩色点)是其自己的数据列。您可以构造DataTable的json表示(用于DataTable构造函数)或数组数组(用于arrayToDataTable函数)。

由于您已经在使用arrayToDataTable函数,因此这是您需要的结构:

$data = array(
    array('Date', 'Question 1', array('type' => 'number', 'role' => 'interval', 'id' => 'Q1Median'), 'Question 2', array('type' => 'number', 'role' => 'interval', 'id' => 'Q2Median') /* repeat for other questions */),
    // format is array(date, q1 score, q1 median, q2 score, q2 median...)
    // set the median in the first row for the day, leave it null for all other rows
    array('2014, 03, 02', 54, 49, /* repeat for other questions */),
    array('2014, 03, 02', 43, null, /* repeat for other questions */),
    // repeat one row for each student for each day
);

中间值在“区间”角色列中设置,您可以将其样式设置为在图表选项中显示为曲线:

interval: {
    // use the column ID of an interval to set the options for that interval
    Q1median: {
        style: 'line'
    },
    Q2median: {
        style: 'line'
    }
    // etc...
}

样式间隔选项记录为here