2012-03-24 16 views
0

UPDATE @MichaelRushtonのコメントに応じてコードを更新しました。私は現在Highchartsを使用していますが、データシリーズに出力するのに問題があります。配列の出力に基づいてハイチャートを生成する

私はmysqlクエリから次の配列を生成しました。これを折れ線グラフに出力したいと思います。私のY軸には金額、X軸には日付範囲、凡例にはチャートにプロットされたさまざまな項目が含まれています。

// Call the stored procedure 
    $stmt->execute();      

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     $array[$row['legend']][$row['date']] = $row['amount']; 
     //print_r($array); 
    } 


    chart = new Highcharts.Chart({ 

    chart: { 
    renderTo: 'container', 
    type: 'line' 
    }, 

    xAxis: 
    { 
    categories: [2012-03-01, 2012-03-02, 2012-03-03, 2012-03-04, 2012-03-05, 2012-03-06, 2012-03-07, 2012-03-08, 2012-03-09, 2012-03-10, 2012-03-11, 2012-03-12, 2012-03-13, 2012-03-14, 2012-03-15, 2012-03-16, 2012-03-17, 2012-03-18, 2012-03-19, 2012-03-20, 2012-03-21, 2012-03-22, 2012-03-23, 2012-03-24, 2012-03-25, 2012-03-26, 2012-03-27, 2012-03-28, 2012-03-29, 2012-03-30, 2012-03-31], 
    }, 

    series: 
    [ 

<?php 
    foreach ($array as $legend => $data) 
     { 
      echo '{'; 
      echo "name: '" . $legend . "',"; 

      $values = array(); 

      for ($i = 1; $i <= 31; ++$i) 
      { 
      $values[] = isset($data[$i]) ? $data[$i] : 0; 
      } 

      echo 'data: [' . implode(', ', $values) . '],'; 
      echo '},'; 

     } 
?> 
], 
} 
); 

<div id="container" style="width: 100%; height: 400px"></div> 
) 

このコードは、次の出力を私に提示している:

series: [ {name: 'Something Tastier',data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],},{name: 'Something Tasty',data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],}, ], }); 

ザ・データ系列への出力は値が存在しない権利を除いているようです。誰かがそれ以上のアイデアを持っている場合、それは非常に高く評価されます。

答えて

1

ハイチャートは、グラフのための私のお気に入りのオプションです。

編集:今、ちょうど一日ではなく、完全な日付を使用しています、月のダイナミックを作った(使用して$start

Array (

    [legend_one] => Array 
    (

    [2012-03-01] => 100 
    [2012-03-02] => 200 
    [2012-03-03] => 300 
    ... 

) 

    [legend_two] => Array 
    (

    // Day of the month  
    [2012-03-01] => 100 
    [2012-03-02] => 200 
    [2012-03-03] => 300 
    ... 

) 

    ... 

) 

あなたは、このようなHighchartsを使用することができます:それはのように見えるためにあなたのアレイを構築する価値があるかもしれません変数)を使用し、strtotimeを使用して次の日付を計算するときには、$i - 1の必要性を削除するために、1ではなく0でイテレータを開始しました。

chart = new Highcharts.Chart({ 

    xAxis: 
    { 

    categories: [ 

<?php 

     // You could dynamically set this date using $_GET/$_POST 
     $start = '2012-03-01'; 

     $dates = array(); 

     for ($i = 0, $days = date('t', strtotime($start)); $i < $days; ++$i) 
     { 
     $dates[] = date('Y-m-d', strtotime($start . ' + ' . $i . ' day')); 
     } 

     echo "'" . implode("', '", $dates) . "'"; 

?> 

    ], 

    }, 

    series: 
    [ 

<?php 

    foreach ($array as $legend => $data) 
    { 

     echo '{'; 

     echo "name: '" . $legend . "',"; 

     $values = array(); 

     for ($i = 0; $i < $days; ++$i) 
     { 

     $date = date('Y-m-d', strtotime($start . ' + ' . $i . ' day')); 

     $values[] = isset($data[$date]) ? $data[$date] : 0; 

     } 

     echo 'data: [' . implode(', ', $values) . '],'; 

     echo '},'; 

    } 

?> 

    ], 

} 
); 
+0

こんにちはマイケルは、非常に便利なおかげです。私は現在、PDO $ stmt-> fetchAll(PDO :: FETCH_ASSOC)を使用しています。私の配列をレンダリングする。あなたが示唆したアレイへの出力をどのように変更するかについてのアイデアはありますか? –

+1

結果を反復して '$ array [$ row ['legend']] [$ row ['day']] = $ row ['amount'];' – MichaelRushton

+0

マイケルコードが今そこに届いているようです。データシリーズを更新するのに問題があります。 –

0

あなたは間違った方向に行きます。すでに利用可能なものを探している場合は、のようにデータを出力し、を受け入れる必要があります。その逆ではありません。

と言えば、pChartを試してください。さまざまなフォーマットを幅広くサポートしています。

関連する問題