0

会社のイントラネット Web ページ用にいくつかの単純な Amcharts グラフを設定しようとしています。過去 2 週間にわたって、私は HTML/JS を作成し、Amcharts (デモ用に HTML にハードコードされたデータ) を使用して素敵なグラフィックを作成しました。また、XAMPP をインストールして MySQL データベースを作成し、テーブルと csv ファイルからインポートされるいくつかのデータを入力しました。

これまでのところ、すべて正常に動作しています。素敵なグラフィックを表示でき、グラフにデータを提供するためのデータを収集できます。ただし、私はこの問題に 2 つの側面から取り組んできました (ソース データをデータベースに取得し、Web ページのグラフにデータを表示する)。ここで、これら 2 つの端を結合する必要があるため、Amcharts に MySQL からのデータをフィードできます。

PHP を使用して MySQL からデータを取得し、これを Amcharts で使用できる配列に入れる必要があることはわかっていますが、PHP の知識は非常に基本的であり、コードに苦労しています。

私が持っているのは、MySQL に正常に接続し、データを抽出してブラウザに表示する PHP コードです。これは機能します。Amcharts がグラフをプロットするために必要な形式で、そのデータを多次元配列に取得する方法がわかりません。

ここで私に助けを与えて、不足している部分を埋めることができれば、本当に素晴らしいことです. 「実際の」phpコードの基礎として配列を作成するロジックの擬似コードがあります。

これは、配列を設定するための疑似コードです。

;charset=UTF-8', '', '', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

$stmt = $db->query("SELECT * FROM <mytable> WHERE <mycondition>");

$prevweek = "9999";
$headrowdone = 0;

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  if ($prevweek < $row['WeekNumber']) {
      // New week so write out Category X Label ('Week') with the week number of the following data rows
      chartData.push($DataRow);
      $headrowdone = 0;
  } 
  if (!$headrowdone) {
      $DataRow = "Week: "+$row['WeekNumber'];
      $headrowdone = 1;
  }
  // Write out the X-Axis Category value and the Y-Axis value
  $DataRow = $DataRow+$row['XAxisCategory']+": "+$row['YAxisCategory'];
  $prevweek = $row['WeekNumber'];
}
chartData.push($DataRow); ?>

SQL テーブルは次のようになります。

CREATE TABLE ( WeekNumber varchar(4), XAxisCategory varchar(50), YAxisValue integer );

'1301','A',10 '1301','B',20 '1301','C',24 '1302','A',11 '1302','B',22 '1302','C',27 '1303','A',14 '1303','B',23 '1303','C',28 ...etc

amcharts のデータ配列は次のようにする必要があります。

var chartData = [{ 週: "1301", A: 10, B: 20, C: 24 }, { 週: "1302", A: 11, B: 22, C: 27 }, { 週: "1303" 、A: 14、B: 23、C: 28 ....etc }];

4

1 に答える 1

2
// This is spoofing your fetch via pdo
$rows [] = array('WeekNumber'=>1301, 'A'=>10);
$rows [] = array('WeekNumber'=>1301, 'B'=>20); 
$rows [] = array('WeekNumber'=>1301, 'C'=>25);

$rows [] = array('WeekNumber'=>1302, 'A'=>12);
$rows [] = array('WeekNumber'=>1302, 'B'=>22); 
$rows [] = array('WeekNumber'=>1302, 'C'=>27);
//var_dump($rows);

// set up some vars
$lastweek = '';
$ctr = 0;
$data = array();


// loop thru the vars, build another array
foreach( $rows as $row){

if($row['WeekNumber'] !== $lastweek){
  $ctr++;
  $data[$ctr] = array('Week'=>$row['WeekNumber']);
  $lastweek= $row['WeekNumber'];
}
// this could be nicer, but for now will do
if( isset($row['A']) ) $data[$ctr]['A'] = $row['A'];
if( isset($row['B']) ) $data[$ctr]['B'] = $row['B'];
if( isset($row['C']) ) $data[$ctr]['C'] = $row['C'];

}

var_dump($data);

次に、json_encode() を使用して、必要な形式に変換します。

この答えは少しぎこちないですが、少なくとも文字列を構築してjsonを作成することから逃れます。

于 2013-04-20T08:36:34.567 に答える