0

ハイチャートを使用して基本的な縦棒グラフを作成する必要があります。これが私のPHPコードです:

$query = "SELECT campaign_id, kpi, label, val FROM table WHERE id = $1";

$result = pg_prepare($db, "report", $query);
$result = pg_execute($db, "report", array($campaignID));

while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC))
{
    $response['xlabels'][] = $row['label'];
    $response['xdata'][] = (float)$row['val'];
}

pg_free_result($result);
pg_close($db);

echo json_encode($response);

PostgreSQLクエリは次のようにデータを返します(たとえば、campaign_id = 5)。

 id |    kpi    | label | val  
----+-----------+-------+------
  5 | Voter     | East  | 0.18 
  5 | Non-Voter | East  | 0.12 
  5 | Voter     | West  | 0.82 
  5 | Non-Voter | West  | 0.88 

私のAPIはとを保存しxlabelsます:xdataxAxis.categoriesseries

$.get('vote_api.php', {'id' : id}, function(data) {

    options.chart.type = 'column';

    options.xAxis.categories = data.xlabels;
    options.series = data.xdata;   

    chart = new Highcharts.Chart(options);

    }, "json");

kpi私のシリーズとしての(Voter vs. Non-Voter)および私のxAxisとしての(East vs West)の正しいデータ形式( JSFiddlelabelを参照してください):

xAxis.categories = ['East', 'West'];
series = [{name: 'Voter',
            data: [0.18, 0.82]},
          {name: 'Non-Voter',
            data: [0.12, 0.88]}]

しかし、私のwhile loop部分$response['xlabels'][] = $row['label']; $response['xdata'][] = (float)$row['val'];は私にこのようなものを与えます:

[xlabels] => Array
    (
        [0] => East
        [1] => East
        [2] => West
        [3] => West
    )

[xdata] => Array
    (
        [0] => 0.18
        [1] => 0.12
        [2] => 0.82
        [3] => 0.88
    )

誰かがこれを行う方法についていくつかのヒントを与えるでしょうか?本当にありがたいです!!

4

1 に答える 1

1

あなたは試すことができます:

$query = "SELECT campaign_id, kpi, label, val FROM table WHERE id = $1";

$result = pg_prepare($db, "report", $query);
$result = pg_execute($db, "report", array($campaignID));

while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC))
{
    if (!in_array($row['label'], $response['xlabels']))
    {
        $response['xlabels'][] = $row['label'];
    }
    $response['xdata'][ $row['kpi'] ][] = (float)$row['val'];
}

pg_free_result($result);
pg_close($db);

最初の変更:

    if (!in_array($row['label'], $response['xlabels']))
    {
        $response['xlabels'][] = $row['label'];
    }

xlabels配列に「East」と「West」を数回保存することを避けます。

2番目の変更:

    $response['xdata'][ $row['kpi'] ][] = (float)$row['val'];

xdata配列に次元を追加します。値は「kpi」に従って異なる配列に割り当てられます。

于 2012-09-08T14:48:19.197 に答える