将mysql结果集转换为要输入HighCharts的(名称,数据)对象

时间:2012-09-20 21:01:20

标签: php jquery mysql json highcharts

我使用HighCharts Bar graph将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_encode($row)将我的结果集转换为JSON对象。 但我得到了以下输出:

[{"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 ?>

  3. 编辑:

    我能够通过以下方式解决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

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

    series: variableName
    

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

3 个答案:

答案 0 :(得分: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。您可能希望浏览参考页面上的this example以了解json_encode如何与数组一起使用

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

P.S。请不要将多个问题混合在一起,单独发布,也可以使用javascript控制台等工具,更有效地搜索SO

答案 1 :(得分: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 .= ']';

答案 2 :(得分:0)

select concat('{name:"', name, '",data:[', expense, ']}') as foo
from bar