0

我正在使用HighCharts 条形图将 mysql 结果集中的数据绘制成条形图。

现在我的查询结果如下:

Name       Expense
-----------------
July       700.0000
August     450.0000  
September  1700.0000

HighCharts的series属性需要以下格式的数据来绘制图形

[
 {name:"July",data:[700.0000]},
 {name:"August",data:[450.0000]},
 {name:"September",data:[1700.0000]}
] 

所以我想将我的结果集转换为 JSON 对象,使用json_encode($row). 但我得到以下输出:

[{"name":"July","data":"700.0000"},
 {"name":"August","data":"450.0000"},
 {"name":"September","data":"1700.0000"}] 

疑点:

  1. 有没有办法以与 HighCharts 的系列属性所要求的格式完全相同的格式获取/转换结果集?
  2. 我也可以使用在 php 块中创建的对象,直接进入 javascript 吗?假设我从结果集中创建了一个对象$jsonNameData。然后我可以在javascript中使用它吗

    series: <? echo $jsonNameData ?>

编辑:

我能够通过执行以下操作来解决 Q1:

$count = 0;
$strSeries = "[";
while($r = mysql_fetch_assoc($result)) {

   if($count == 0){
       $strSeries .= "{name:'" . $r['name'] . "',";
       $strSeries .= "data:[" . $r['data'] . ']}';
       $count = 1;
   }
   else {
       $strSeries .= ",{name:'" . $r['name'] . "',";
       $strSeries .= "data:[" . $r['data'] . ']}';
   }
 $rows[] = $r;
}
$strSeries .= "]";

将所需的字符串放入$strSeries.

现在的问题是第二个问题。我将值分配给$strSeriesjavascript 中的一个变量,但是当我将该变量用作

series: variableName

即使变量具有正确的值(通过警报检查),它也没有正确绘制图形。

4

3 回答 3

1

没有机会运行下面的代码,但这应该可以工作或与此非常相似

$series=array();
while($item = mysql_fetch_assoc($result)) {
  $serie=array(
     "name" => $item['name'],
     "data" => array(floatval($item['data']))
  );
  array_push($series,$serie);
}
echo json_encode($series);

一个建议是始终坚持进行json_encode()jsonification。您可能想通过参考页面上的这个示例来了解 json_encode 如何与数组一起工作

编辑:回答你的第二个问题。您可能在 javascript 控制台中收到 highchart 错误 #14?看看这个问题Highcharts 返回错误 14

PS请不要将多个问题混为一谈,分开发布,也可以更有效地使用javascript控制台和SO搜索等工具

于 2012-09-21T06:18:58.163 回答
0

我会试试这个:

$jsonObj = '[';
foreach($mysqlResul as $item){
    $jsonObj .= '{"name":"'.$item['name'].'","data":['.$item['data'].']},';
}
// strip off last comma
$jsonObj = substr(0,strlen($jsonObj)-1,$jsonObj);
$jsonObj .= ']';
于 2012-09-20T21:20:47.153 回答
0
select concat('{name:"', name, '",data:[', expense, ']}') as foo
from bar
于 2012-09-20T21:31:54.503 回答