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;

}