将 mysql 结果集转换为 (name, data) 对象以输入 HighCharts
Posted
技术标签:
【中文标题】将 mysql 结果集转换为 (name, data) 对象以输入 HighCharts【英文标题】:convert mysql resultset into a (name, data) object to be fed into HighCharts 【发布时间】:2012-09-13 07:20:19 【问题描述】:我正在使用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"]
疑问:
-
有没有办法以与 HighCharts 的系列属性所要求的格式完全相同的格式获取/转换结果集?
我也可以使用在 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
。
现在问题是第二个问题。我将 $strSeries
的值分配给 javascript 中的一个变量,但是当我将该变量用作
series: variableName
即使变量具有正确的值(通过警报检查),它也没有正确绘制图形。
【问题讨论】:
请不要一个问题多问,分开发帖 【参考方案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 控制台中收到 highchart 错误 #14?看看这个问题Highcharts returning error 14
附言请不要将多个问题混为一谈,分开发布,还要更有效地使用javascript控制台和SO搜索等工具
【讨论】:
【参考方案2】:我会试试这个:
$jsonObj = '[';
foreach($mysqlResul as $item)
$jsonObj .= '"name":"'.$item['name'].'","data":['.$item['data'].'],';
// strip off last comma
$jsonObj = substr(0,strlen($jsonObj)-1,$jsonObj);
$jsonObj .= ']';
【讨论】:
【参考方案3】:select concat('name:"', name, '",data:[', expense, ']') as foo
from bar
【讨论】:
以上是关于将 mysql 结果集转换为 (name, data) 对象以输入 HighCharts的主要内容,如果未能解决你的问题,请参考以下文章
如何将查询的结果集转换为可以进一步解析以创建json的pojo类?
无法将 MySQL 日期/时间值转换为 System.DateTime