我正在尝试从谷歌图表api制作图表,但我无法将我的php变量放入脚本中:我得到一个空白页面。
PHP
$columns = array(
array('string' => 'x'),
array('number' => 'values'),
array('id' => 'i1', 'type' => 'number', 'role' => 'interval'),
array('id' => 'i1', 'type' => 'number', 'role' => 'interval'),
array('number' => 'OtherValues'),
array('id' => 'i1', 'type' => 'number', 'role' => 'interval'),
array('id' => 'i1', 'type' => 'number', 'role' => 'interval')
);
$test = array(
array( 'a' => array(100, 90, 150,15,10,20)),
array( 'b' => array(120, 95, 130,20,10,30)),
array( 'c' => array(130, 105, 140,30,25,35)),
array( 'd' => array( 90, 85, 95,40,35,45)),
array( 'e' => array(70, 74, 63,50,45,55)),
array( 'f' => array(30, 39, 22,60,55,65)),
array( 'g' => array(100, 90, 150,15,10,20)),
);
$table['cols'] = $columns;
$table['rows'] = $test;
Html视图
<div id="chart-lines"></div>
<script>
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable(<?php echo json_encode($table) ?>);
// The intervals data as narrow lines (useful for showing raw source
// data)
var options_lines = {
title: 'Line intervals, default',
intervals: { 'lineWidth':2, 'barWidth': 0.5 },
legend: 'none',
};
var chart_lines = new google.visualization.LineChart(document.getElementById('chart-lines'));
chart_lines.draw(data, options_lines);
}
</script>
使用Google Chrome Javascript控制台对于包含以下详细信息的每个图表,我都会收到“未捕获错误:无效类型:未定义”:
R.Osa
R.ug
(anonymous function)
nj.(anonymous function).d
Ep
drawchart
答案 0 :(得分:2)
您的数据结构对于Visualization API的DataTable构造函数不正确。
列的正确格式是列对象数组,其中每个对象都有type
(必填),label
,id
和p
(都是可选的) )属性。 type
是一个字符串,其值可能为string
,number
,boolean
,date
,datetime
和timeofday
。 label
和id
是字符串。 p
是列属性的对象。
行的正确格式是行对象数组,其中每个对象都具有c
和p
属性。 c
是一个单元格对象数组。 p
是行属性的对象。单元格对象具有v
,f
和p
属性,其中v
是单元格的值,f
是字符串格式的值单元格,p
是单元格属性的对象。
所有属性对象的受支持属性因您绘制的图表类型而异。
使用PHP的json_encode
函数,关联数组被转换为对象,非关联数组转换为数组。您的表的适当结构应如下所示:
$columns = array(
array('type' => 'string', 'label' => 'x'),
array('type' => 'number', 'label' => 'values'),
// each interval should have its own unique id,
// but leaving them the same won't break anything for your chart as-is
array('type' => 'number', 'id' => 'i1', 'p' => array('role' => 'interval')),
array('type' => 'number', 'id' => 'i1', 'p' => array('role' => 'interval')),
array('type' => 'number', 'label' => 'OtherValues'),
array('type' => 'number', 'id' => 'i1', 'p' => array('role' => 'interval')),
array('type' => 'number', 'id' => 'i1', 'p' => array('role' => 'interval'))
);
$test = array(
array('c' => array(
array('v' => 'a'),
array('v' => 100),
array('v' => 90),
array('v' => 150),
array('v' => 15),
array('v' => 10),
array('v' => 20)
)),
// etc
);
$table['cols'] = $columns;
$table['rows'] = $test;