为柱形图创建动态数据表(未知的列和行)

时间:2014-08-04 15:57:38

标签: php mysql google-visualization

我正在寻找一个循环,该循环从MySQL结果集中检索具有未知数量的列和行的数据,并将其置于GViz格式中。 使用以下代码,我可以动态地读取数据,但我无法将其转换为Google Visualization API所需的格式:

$cols = array();
$row = array();
$i = 0;
while ($i < mysql_num_fields($result)) {
$meta = mysql_fetch_field($result, $i);
    if (!$meta) {
    echo "No information available<br />\n";
    }

    $cols[]= "{id: '".$i."', label: '".$meta->name."', type: '".$meta->type."'}";
    $i++;
    }

while($r = mysql_fetch_assoc($result)) {
$row[]= $r;
}

$jsonTable = json_encode($cols);
$jsonTable2 = json_encode($row);
$Table3 = "{cols: {$jsonTable}, rows: $jsonTable2}";

echo $jsonTable;
     echo '<br>';

echo $jsonTable2;
     echo '<br>';

echo $Table3;
     echo '<br>';

我在调试模式下从浏览器获得的JS错误是:

  

错误:无效的类型,{[id =&#39; 0&#39;,label =&#39; mon&#39;,type =&#39; string&#39;]},对于列&#34 ; 0&#34;

我查看了google文档上的data parameter,但他们的数据一如既往地进行了硬编码。并且this SO - 页面不会动态生成列和行。

我很高兴获得有关正确获取数据参数的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您看到的错误原因是您的JSON字符串构造错误。不要自己尝试构建它们,在PHP中构建数组要容易得多,并允许json_encode函数为你处理难点。

您可以将MySQL中的数据解析为DataTable,如下所示:

$data = array(
    'cols' => array(),
    'rows' => array()
);
for ($i = 0; $i < mysql_num_fields($result), $i++) {
    $meta = mysql_fetch_field($result, $i);
    if (!$meta) {
        echo "No information available<br />\n";
    }
    $data['cols'][] = array(
        'type' => ($i == 0) ? 'string' : 'number',
        'label' => $meta->name,
        'id' => $i
    );
}
while($r = mysql_fetch_assoc($result)) {
    $temp = array();
    foreach ($data['cols'] as $col) {
        $temp[] = array('v' => $r[$col['label']]);
    }
    $data['rows'][] = array('c' => $temp);
}
echo json_encode($data, JSON_NUMERIC_CHECK);