我正在尝试导出下面的MySQL表:
id, asof, value
abc, 2013-06-30, 36000000
abc, 2013-12-31, 48000000
abc, 2014-01-31, 51000000
abc, 2014-02-28, 56000000
xyz, 2013-06-30, 26000000
xyz, 2013-12-31, 33000000
xyz, 2014-01-31, 33000000
xyz, 2014-02-28, 36000000
使用以下json格式在nvd3.js图表中使用:
[
{
"key" : "abc" ,
"values" : [ [ 2013-06-30, 36000000] , [ 2013-12-31, 48000000] , [ 2014-01-31, 51000000] , [ 2014-02-28, 56000000]
},
{
"key" : "xyz" ,
"values" : [ [ 2013-06-30, 26000000] , [ 2013-12-31, 33000000] , [ 2014-01-31, 33000000] , [ 2014-02-28, 36000000]
}
]
我确定这是一个新手问题,但我正在努力解决它。任何指导都将非常感谢!
编辑:
我目前一直在尝试使用数组和while语句但是却无法弄清楚如何修改数组以便它可以输出到正确的json格式。
$query= mysqli_query($db,"SELECT id, asof, value
FROM table;"
);
if ( ! $query) {
echo mysqli_error();
die;
}
$rows = array();
while($r = mysqli_fetch_assoc($query)) {
$rows[] = $r;
}
print json_encode($rows);
答案 0 :(得分:1)
这样做最简单的方法可能就是创建一个多维数组,用数据库中的数据填充它,然后使用json_encode创建一个JSON字符串,然后发送给客户端。
这是一个函数的简单示例,它将接受一个项目数组并以预期的格式返回一个JSON字符串。为简单起见,假设数据是一个包含三列的二维数组,但您应该修改它以使用数据库查询返回的格式。
function convert($data) {
$intermediate = array();
// This intermediate steps is used just to group all rows with
// the same key
foreach($data as $item) {
list($key, $date, $value) = $item;
$intermediate[$key][] = array($date, $value);
}
$output = array();
foreach($intermediate as $key => $values) {
$output[] = array(
'key' => $key,
'values' => $values
);
}
return $output;
}
由于您是从数据库获取数据,因此第一个foreach语句中的变量$item
实际上可能是一个关联数组,因此您必须编写类似$item['key']
的内容来获取列中的数据当前行。
如果您想使用mysqli_fetch_assoc,那么您可以尝试以下列方式调用函数convert
:
$conn = mysqli_connect('', '', '')
$query = 'SQL you wish to execute'
$result = mysqli_query($conn, $query)
if($result) {
$jsonData = convert($result);
}
然而,功能本身需要稍微改变
function convert($result) {
$intermediate = array();
while($item = mysqli_fetch_assoc($result)) {
$key = $item['id'];
$date = $item['asof'];
$value = $item['value'];
$intermediate[$key][] = array($date, $value);
}
// The rest of the function stays the same
}