Php Highcharts-解析json系列
我用这个画柱状图 我用它来表示:Php Highcharts-解析json系列,php,json,highcharts,Php,Json,Highcharts,我用这个画柱状图 我用它来表示: <?php $query = mysql_query("SELECT sales_raport_all.from_date, sales_raport_all.to_date, sales_raport_all.konto,
<?php
$query = mysql_query("SELECT
sales_raport_all.from_date,
sales_raport_all.to_date,
sales_raport_all.konto,
SUM(sales_raport_all.saldo_sprzedazy),
SUM(sales_raport_all.wartosc_kosztowa),
SUM(sales_raport_all.marza),
klienci_ax_all.sales_group,
klienci_ax_all.nazwa
FROM
sales_raport_all
INNER JOIN
klienci_ax_all
ON
sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
WHERE
YEAR(from_date) = YEAR(CURDATE())
GROUP BY
sales_raport_all.from_date,
klienci_ax_all.sales_group
ORDER BY
sales_raport_all.from_date,
klienci_ax_all.sales_group");
$raw = array();
$dates = array();
while ($r = mysql_fetch_array($query)) {
$date = $r['from_date'];
if (!in_array($date, $dates)) $dates[] = $date;
$sales_group = $r['sales_group'];
$raw[$sales_group][$date] = intval($r['SUM(sales_raport_all.saldo_sprzedazy)']);
}
$data = array();
$data[0] = array('name' => "Date", 'data' => $dates);
foreach ($raw as $name => $d) {
$new_data = array('name' => $name, 'data' => array());
foreach ($dates as $date) {
$new_data['data'][] = isset($d[$date]) ? $d[$date] : 0;
}
$data[] = $new_data;
}
print json_encode($data);
有没有一种简单的方法来定义json中的所有数据?这个数据是可变的,如果我声明11个变量,只有7个,那么图表就不会绘制
一个日期的JSON输出:
[{"name":"Date","data":["2014-01-01"]},{"name":"IN","data":[2580]},{"name":"KD","data":[5030]},{"name":"\u0141S","data":[12628]},{"name":"NN","data":[400]},{"name":"SG","data":[12979]},{"name":"TD","data":[15096]}]
//编辑
我创建新文件:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Highcharts Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var options = {
chart: {
renderTo: 'container',
type: 'column',
marginRight: 130,
marginBottom: 25
},
title: {
text: 'test',
x: -20 //center
},
subtitle: {
text: '',
x: -20
},
xAxis: {
categories: []
},
yAxis: {
title: {
text: 'test'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'</b><br/>'+
this.x +': '+ this.y;
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'top',
x: -10,
y: 100,
borderWidth: 0
},
series: []
}
$.getJSON("test2.php", function(json) {
options.xAxis.categories = json[0]['category'];
options.series[0] = {};
options.series[0].name = json[0]['name'];
options.series[0].data = json[0]['data'];
chart = new Highcharts.Chart(options);
});
});
</script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
</head>
<body>
<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>
</body>
</html>
该系列看起来很棒,但我不知道如何更改类别,例如您可以用javascript处理它。换句话说,不是为每个
对定义变量,而是返回数据并让javascript构造序列。
例如,给定您当前的输出,您可以在单独的数组中准备X和Y值(在javascript中),并编写一个函数将这些值推送到系列中。可以这样做(以jQuery为例):
其中变量options
定义了一个没有series
成员的图表模板(由上述函数添加)
编辑
在问题中的编辑之后,下面是支持它的示例。
请注意,JSON中的数据表示为数组的数组。每个数组中的第一个元素对应于第一个类别,每个数组中的第二个元素对应于第二个类别等。除了不正确的json格式(这是mentioed)之外,您需要将日期推送到highcharts中的类别中,或者使用datetime类型的axis,然后将日期解析为时间戳。但是{“name”:“date,“数据”:[“2014-01-01”]}是一个类别,而不是一个系列。您可以根据类别准备数据,例如:
[{“类别”:{“名称”:“日期”,“数据”:[“2014-01-01”]},“系列”:[{“名称”:“IN”,“数据”:[2580]},{“名称”:“KD”,“数据”:[5030]},{“名称”:“\u0141S”,“数据”:[12628]},{“名称”:“日期”,“数据”:2014-01-02“]}”,系列:[{“名称”:“IN”,“数据”:[1234]}]}];
。这是我搜索的内容,但如何将其添加到JSON编码中?你能看看编辑部分吗?有什么建议吗?我已经用jsFiddle更新了我的答案。希望这有帮助。我们的JSON格式不正确,什么是正确的格式?我在一个示例中看到了这种格式:(格式应该是一个没有引号的数组。你有任何工作示例吗?我在网上只看到一个,我到处看看……有人能给我一个好的示例如何正确编码吗?我是新手。我将JSON改为[{“name”:“Data”,“Data”:[“2014-01-01”,“2014-01-01”,“2014-01-01”,“2014-01-01”,“2014-01-01”,“2014-01-01”]},{“name”:“SGdata:[2580530126284001297915096]},{“名称”:“KD”,“数据”:[166033339582732903411189]},{“名称”:“IN”,“数据”:[9201697046,-33239453906]}]
这是正确的吗?我看了这个示例,但是如何实现这个数据?如何解析这个json?因为在数组数据中包含像“2014-01-01”这样的元素“不应在series对象中使用。我指的是如何在highcharts中解析javascirpt中的json,而不是如何创建。您是否使用此[{”名称“:“数据”,“数据”:[“2014-01-01”,“2014-01-01”,“2014-01-01”,“20”14-01-01,“2014-01-01”},{“名称”:“SG”,“数据”:[2580530126284001297915096]}{“名称”:“KD”,“数据”:[166033339582732903411189]},{“名称”:“IN”,“数据”:[9201697],”,3046,-33239453906]}]作为系列对象?我建议本教程:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Highcharts Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var options = {
chart: {
renderTo: 'container',
type: 'column',
marginRight: 130,
marginBottom: 25
},
title: {
text: 'test',
x: -20 //center
},
subtitle: {
text: '',
x: -20
},
xAxis: {
categories: []
},
yAxis: {
title: {
text: 'test'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'</b><br/>'+
this.x +': '+ this.y;
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'top',
x: -10,
y: 100,
borderWidth: 0
},
series: []
}
$.getJSON("test2.php", function(json) {
options.xAxis.categories = json[0]['category'];
options.series[0] = {};
options.series[0].name = json[0]['name'];
options.series[0].data = json[0]['data'];
chart = new Highcharts.Chart(options);
});
});
</script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
</head>
<body>
<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>
</body>
</html>
<?php
$db_host = '******';
$db_user = '******';
$db_pass = '******';
$db_database = '******';
$link = mysql_connect($db_host,$db_user,$db_pass) or die('Nawiązanie połączenia z bazą danych nie było możliwe');
mysql_select_db($db_database,$link);
mysql_query("SET names UTF8");
$query = mysql_query("SELECT
sales_raport_all.from_date,
sales_raport_all.to_date,
sales_raport_all.konto,
SUM(sales_raport_all.saldo_sprzedazy),
SUM(sales_raport_all.wartosc_kosztowa),
SUM(sales_raport_all.marza),
klienci_ax_all.sales_group,
klienci_ax_all.nazwa
FROM
sales_raport_all
INNER JOIN
klienci_ax_all
ON
sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
WHERE
YEAR(from_date) = YEAR(CURDATE())
GROUP BY
sales_raport_all.from_date,
klienci_ax_all.sales_group
ORDER BY
sales_raport_all.from_date,
klienci_ax_all.sales_group");
$result = array();
while($r = mysql_fetch_array($query)) {
$grupa = $r['sales_group'];
$datetime = $r['from_date'];
$result['name'][] = $datetime;
$result['category'][] = $grupa;
$result['data'][] = intval($r['SUM(sales_raport_all.saldo_sprzedazy)']);
}
$json = array();
array_push($json,$result);
print json_encode($json);
?>
[{"name":["2014-01-01","2014-01-01","2014-01-01","2014-01-01","2014-01-01","2014-01-01"],"category":["IN","KD","\u0141S","NN","SG","TD"],"data":[2580,5030,12628,400,12979,15096]}]
function build_chart(x_values, y_values, options)
{
jQuery.each(x_values, function(item) {
options.xAxis.categories.push(x_values[item]);
});
var series = {
data: []
};
jQuery.each(y_values, function(item) {
series.data.push(parseInt(y_values[item]));
});
options.series.push(series);
chart = new Highcharts.Chart(options);
return chart;
}