2016-06-17 4 views
0

私はこの時点で立ち往生しています。私は、年間の顧客行動を予測するグラフを作成しようとしています。 2013年まで。私はデータベースを照会し、クエリされた年の12ヶ月の配列を返す関数を作成し、その関数を次の年にコードを修正することを避けるために何年ものレコードに渡します。私の問題は、グラフに渡すデータがループ全体のデータを描画し、レコードの新しい年が始まるときに新しいデータセットまたは2行目を作成する必要があることです。私の配列は次のようになります。新しいデータセットまたは新しい行を追加する方法アレイ値から

... 
11 => 
    array (size=3) 
     'year' => int 2013 
     'month' => string 'Dec' (length=3) 
     'total' => int 33 

array (size=12) 
    0 => 
    array (size=3) 
     'year' => int 2014 
     'month' => string 'Jan' (length=3) 
     'total' => int 41 
    ... 

、これは私がこれまでしているコードです:

Issue Snapshot

$table['cols'] = array(

    array('label' => 'Month', 'type' => 'string'), 
    array('label' => '2013', 'type' => 'number'), 
    array('label' => '2014', 'type' => 'number'), 
    array('label' => '2015', 'type' => 'number'), 
    array('label' => '2016', 'type' => 'number') 

); 

$rows_graph = array(); 
$i = 0; 
// loop for the customers list 
while ($rows = mysqli_fetch_object($customers)) { 

    echo 'Loop1 - ' . $rows->channel . '<br /><br />'; 

    // next loop for each year of records 
    foreach ($years as $items) { 

     echo 'Year: '.$items['year'].'<br />'; 


     // function(dbcon,year,customer) return an array of 12 months (ex. year => 2013, month => Jan, total = 10) 
     // with the records per month for the current customer in that year. 
      $data = chart_values($dbcon, $items['year'], $rows->channel); 
      var_dump($data); 

      // now i loop for each month 
      foreach ($data as $key => $val) { 
       // var_dump($test); 
       // echo $val['year'] . ' - ' .$val['month'] . ' - ' . $val['total'] . '<br />'; 
       $temp = array(); 

       $temp[] = array('v' => (string)$val['month']); 

       // Values of each line 
       $temp[] = array('v' => (int)$val['total']); 

       $rows_graph[] = array('c' => $temp); 


      } 

    } 
    $table['rows'] = $rows_graph; 
    $jsonTable = json_encode($table); 
    echo $jsonTable; 

    //////////////////////// graphic ////////////////////////// 

、そして得られたグラフは、すべてこのような1行で表示します

そして、私はこのようなグラフを作成したいと思います(私自身のデータで、年数は12ヶ月、合計は月):

enter image description here

+0

私はいつもトラブルPHPを読んを持っていますが、あなたはしています間違いなく1つの列にすべての値を取得します。凡例のすべてのシリーズを取得しているため、列が正しく設定されています。私は実際には、あなたが実際にその年の値を右の列に入れることを確認することをチェックしていないと思っています。軸は日付であるため、日付列はすべての年のデータを表示する必要があります。すなわち、 2013年1月の日付行には2014年1月、2015年および2016年があります。これを行う別の方法がありますが、それはおそらくあなたにとって価値があるよりも複雑です。 – nbering

+0

主な問題は、ループ内で配列を作成するときに翌年に再びJanから再起動する方法だと思いますが、実際には次の合計値を追加して2番目の列を埋め込むことができますが、両方とも同じ曲線を示しています – Aramil

+0

SQLデータベースを使用している場合は、必要な形式でデータベースからデータを取得するために、サブクエリまたは結合を使用しています。それはデータベースの複雑さを軽減しますが、データベースはデータを結合し、そのような生の数字を処理するために最適化されています。私はJavaScript側でこれを行ういくつかの方法を考えることができますが、私は実際にはサーバー側であなたを助けることができるPHPを知らないだけです。 – nbering

答えて

0

[OK]を私は多分きれいbutit仕事ではありません、私が探していたものを達成することができました、これは私がやったことです:

// loop for the customers list 
while ($rows = mysqli_fetch_object($customers)) { 

    echo 'Loop1 - ' . $rows->customer . '<br /><br />'; 

//cleaning arrays 

    $rows_graph = array(); 
    $jan = array(); 
    $feb = array(); 
    $mar = array(); 
    $apr = array(); 
    $may = array(); 
    $jun = array(); 
    $jul = array(); 
    $aug = array(); 
    $sep = array(); 
    $oct = array(); 
    $nov = array(); 
    $dec = array(); 
    $data = array(); 
    $table = array(); 

    $table['cols'] = array(
     array('label' => 'Month', 'type' => 'string'), 
    ); 

    // next loop for each year of records 
    foreach ($years as $items) { 

     // echo 'Year: '.$items['year'].'<br />'; 
     $table['cols'][] = array('label' => $items['year'], 'type' => 'number'); 

     // function(dbcon,year,customer) return an array of 12 months (ex. year => 2013, month => Jan, total = 10) 
     // with the records per month for the current customer in that year. 
     $data[] = chart_values($dbcon, $items['year'], $rows->channel); 
     //var_dump($data); 


    } 
    // here is build the array for the chart 
    //var_dump($data); 

    $jan[] = array('v' => (string)'Jan'); 
    $feb[] = array('v' => (string)'Feb'); 
    $mar[] = array('v' => (string)'Mar'); 
    $apr[] = array('v' => (string)'Apr'); 
    $may[] = array('v' => (string)'May'); 
    $jun[] = array('v' => (string)'Jun'); 
    $jul[] = array('v' => (string)'Jul'); 
    $aug[] = array('v' => (string)'Aug'); 
    $sep[] = array('v' => (string)'Sep'); 
    $oct[] = array('v' => (string)'Oct'); 
    $nov[] = array('v' => (string)'Nov'); 
    $dec[] = array('v' => (string)'Dec'); 


    foreach ($data as $value) { 
     // var_dump($value); 
     foreach ($value as $key => $val) { 
      // var_dump($val); 
      // echo $val['year'] . ' - ' . $val['month'] . ' - ' . $val['total'] . '<br />'; 
      //$temp = array(); 
      //$temp[] = array('v' => (string)$val['month']); 

      if ($val['month'] == 'Jan') { 
       $jan[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Feb') { 
       $feb[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Mar') { 
       $mar[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Apr') { 
       $apr[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'May') { 
       $may[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Jun') { 
       $jun[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Jul') { 
       $jul[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Aug') { 
       $aug[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Sep') { 
       $sep[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Oct') { 
       $oct[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Nov') { 
       $nov[] = array('v' => (int)$val['total']); 
      } 
      if ($val['month'] == 'Dec') { 
       $dec[] = array('v' => (int)$val['total']); 
      } 

     } 
    } 


    $rows_graph[] = array('c' => $jan); 
    $rows_graph[] = array('c' => $feb); 
    $rows_graph[] = array('c' => $mar); 
    $rows_graph[] = array('c' => $apr); 
    $rows_graph[] = array('c' => $may); 
    $rows_graph[] = array('c' => $jun); 
    $rows_graph[] = array('c' => $jul); 
    $rows_graph[] = array('c' => $aug); 
    $rows_graph[] = array('c' => $sep); 
    $rows_graph[] = array('c' => $oct); 
    $rows_graph[] = array('c' => $nov); 
    $rows_graph[] = array('c' => $dec); 

    $table['rows'] = $rows_graph; 
    $jsonTable = json_encode($table); 
    //var_dump($table); 
    //echo $jsonTable; 


    //////////////////////// graphic ////////////////////////// 
関連する問題