如何使用PHP和Google图表构建折线图


How to build a line chart using PHP and Google Charts?

我想创建一个每小时订单的折线图,这样我就可以很容易地看到它们是何时下的。但我很难把所有的数据都放在图表里。我想使用谷歌图表,因为我对它有一些熟悉,如果可能的话,我会避免使用第三方函数/类。

<script type="text/javascript">
// some more code here
function drawChart() {
   var data = google.visualization.arrayToDataTable([
     ['Time', 'Orders'],
     ['12:00',  $orders12],
     ['13:00',  $orders13],
     ['14:00',  $orders14],
     ['15:00',  $orders15],
     // etc for every hour in the day
   ]);
// some more code here
</script>


while ($objectTime = $objDB->getObject($result_time)) {
/*  PSUEDO CODE
if ($objectTime->entryDate) == [placed between 12:00 - 13:00]
    $orders12++;
if ($objectTime->entryDate) == [placed between 13:00 - 14:00]
    $orders13++;    
*/
}

正如你所看到的,我不知道如何正确地创建正确的变量来构建图表。我是否应该每小时使用一个变量(就像现在一样),如果订单与该时间匹配,则递增?或者有更聪明/更好的方法吗?

如果您将数据放在数组中,如下所示:

$myData = array(array('Time', 'Orders'), array('12:00', 5), array('13:00', 10), array('14:00', 16));

然后您可以将其输出到如下的javascript:

var data = google.visualization.arrayToDataTable(<?php echo json_encode($myData, JSON_NUMERIC_CHECK); ?>);

我建议遵循Robin Heller的建议,使用SQL提供的工具为您完成繁重的工作。

您能做的最好的事情就是首先以合适的方式获取东西。例如,当使用MySQL 时

SELECT count(id) FROM `objects` WHERE timestamp < 12937 and timestamp > 12980

或者使用GROUP BY来进一步最小化的查询数量

SELECT count(id) FROM `objects` GROUP BY (timestampHour)

除此之外,如果您无论如何都需要整个数据集,那么为每个解决方案存储一个变量对我来说似乎是可以的,尽管使用Arrays更干净、更容易输出(foreach而不是echo对每个变量进行处理)