在PHP中将Google Charts p属性添加到JSON

时间:2018-08-06 08:49:45

标签: php json google-visualization

我正在尝试将Google Charts p属性添加到PHP中的表格表的JSON数据中,但无法正常工作。

$options = mysqli_query($con, $sql_sub[3]);

$rows = array();
$table = array();

$table['cols'] = array(
    array('label' => 'Information','type' => 'string'),
    array('label' => '#Number','type' => 'number'),
);

$row = mysqli_fetch_row($options);
$sub_array = array();
$sub_array[] = array("v" => 'Dropped by OPTIONS');
$sub_array[] = array("v" => $row[0]);
$sub_array[] = array("p" => "{'className': 'subrows'}");
$rows[] =  array("c" => $sub_array);

$table['rows'] = $rows;
echo json_encode($table);

其中“子行”定义为:

.subrows {
    background-color: darkblue;
}

在客户端,我具有以下Javascript函数,该函数请求JSON数据并绘制表:

function draw_table(pageID, chartID) {

    fetch(fullUrls[chartID]).then(function (response) {
        response.json().then(function (json) {
            let data = new google.visualization.DataTable(json);
            let cssClassNames = { 'headerRow': 'headerRow', 'tableCell': 'tableCell', 'oddTableRow': 'oddTableRow' };
            let table = new google.visualization.Table(document.getElementById(`table_div_${graphs[chartID]}`));
            table.draw(data, { height: '100%', allowHtml: true, cssClassNames: cssClassNames });
        })
    })
        .catch(error => console.error('Error:', error))
}

我希望该行的背景色为深蓝色,但不是。

我在此处找到的文档:https://developers.google.com/chart/interactive/docs/reference#dataview-class,位于“ DataView类”部分的上方。

有两个相关的问题,但我无法将其解决方案用于我的案子。

谢谢。

朱利安

2 个答案:

答案 0 :(得分:0)

您将已经转换为JSON的内容与要转换为JSON的内容混合在一起。

$sub_array[] = array("p" => "{'className': 'subrows'}");

应该看起来像这样,否则将被双重编码:

$sub_array[] = array("p" => array('className' => 'subrows')));

此外,您需要确保可视化确实使用了p和className(来自文档):

  

如果您的可视化支持任何数据表级别的属性,它将   描述他们;否则,此属性将可用于   应用程序使用。

此外,此语法看起来像是PHP或Javascript的错误或混合:

let table = new google.visualization.Table(document.getElementById(`table_div_${graphs[chartID]}`));

也许其中应该包含<?php echo ... ; ?>

答案 1 :(得分:0)

Data Format中查看表格图表

className属性只能应用于单元格,不能应用于行

您必须将className分配给每一列,
在这种情况下,请使用以下php ...

$sub_array = array();
$sub_array[] = array("v" => 'Dropped by OPTIONS', "p" => array('className' => 'subrows'));
$sub_array[] = array("v" => $row[0], "p" => array('className' => 'subrows'));
$rows[] =  array("c" => $sub_array);