0

我正在尝试在 phpplot 中制作一个图形,我想按年和月对当时所有的注册用户进行分组,并以图形显示。

在数据库中是这样的:

id  | utilizador | registado
----+------------+--------------------
1   |   crisutu  | 2014-05-04 10:41:53
2   |   blabla   | 2014-05-15 04:45:24
3   |   hello    | 2014-06-15 04:45:24

我想在图形中进行转换,例如 2014 年 5 月 - 2 个注册用户 2014 年 6 月 - 1 个注册用户

<?php
#Incluimos a biblioteca
require("phplot-6.1.0/phplot.php");



#Definimos o objeto para inicar a "montagem" do gráfico
#Também delimitamos uma altura e largura do gráfico
$grafico = new PHPlot(750,600);

#Indicamos o formato de imagem a ser usado
$grafico->SetFileFormat("png");

#Indicamos o títul do gráfico e o título dos dados no eixo X e Y do mesmo
$grafico->SetTitle("NSMF");
$grafico->SetXTitle("Meses");
$grafico->SetYTitle("Utilizadores");


function getValues(){
  $db = new mysqli("xxxxxxxxx", "xxxxxxxxxxxx", "xxxxxxxxxxxxx", "xxxxxxxxx");
  $db->set_charset("utf8");
  $query = $db->query("SELECT COUNT(id),registado FROM utilizadores GROUP BY YEAR(registado), MONTH(registado) ");

  while($obj = $query->fetch_object()){

  $values[] = array($obj->id, $obj->id );

  }
  return $values;
  }

$dados = getValues();

$grafico->SetDataValues($dados);

#Exibimos o gráfico
$grafico->DrawGraph();
?>

你能帮我解决问题吗?告诉我有什么问题吗?

4

1 回答 1

0

因此,这是您在代码中犯的三个错误:

访问对象的错误属性

我确实相信您正在尝试访问id获取的对象的属性,但该属性实际上是COUNT(id). 您可以考虑在查询中使用别名,例如:

SELECT COUNT(id) as id, registrado ...

错误的数据格式

默认情况下PHPlot::setDataValues期望以下格式:

array(
    array('key1', 'value11', 'value12'),
    array('key2', 'value21', 'value22'),
    array('key3', 'value31', 'value32'),
)

在您的情况下key, s 是月份,因此每个数组的第一个值必须是适当的月份,所以请写$values[] = array($obj->registado, $obj->id );,而不是$values[] = array($obj->id, $obj->id );

日期格式

最后,在将date分配$value. 所以使用这样的东西:

$values[] = array(date("%F %Y", $obj->registado), $obj->id);
于 2014-09-10T11:48:48.760 回答