Pear::Image_Graph その3

Image_Graph CSV 読込グラフファイル作成

それでは、Image_Graph CSV 読込グラフファイル p_gra-62-csv.php を作成します。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「Pear::Image_Graph その3」の中の
Image_Graph CSV 読込グラフ PHP ファイル
から見てください。
Image_Graph 汎用ファイルとの差分は赤色文字にしています。

Image_Graph 汎用ファイルとの違い

63Pear Village に戻り
左サイドナビ「Pear::Image_Graph」の中の
Image_Graph 汎用 PHP ファイル
を見ると、表示デ-タの設定は PHP ファイルの中で行っています。


 //データ 多重連想配列
 $data = array(
  array(10,13,20,15,12,18),//予測-1
  array( 5, 4, 8,10, 9, 5),//予測-2
  array(22, 0, 0, 0, 0,22),//消線
  array(12,11,19,14,15,14),//実績-1
  array( 5, 3, 9,7.5,8, 4) //実績-2
 );
 //X軸ラベル
 $x = array
  ('1','2','3','4','5','6');

の部分です。
この部分を CSV ファイルから読み込むようにします。
こうすることによりグラフ値デ-タの変更が容易になります。
これ以降のファイル構成は Image_Graph 汎用ファイルと同じです。

CSV ファイルからグラフデータを読み込む

CSV ファイルからデータを読み込む方法は、
63Pear Village に戻り
左サイドナビ「Pear::Image_Graph その2」の中の
Image_Graph その2 グラフ値表示ファイル作成
と基本的には同じです。
最初に CSV ファイルを読み込みます。
$filepath = "file/p_gra_samp.csv";
ファイルのあるフォルダ名とファイル名を設定します。
そしてインスタンスを定義します。
$file = new SplFileObject($filepath);
次ぎに、CSV 列として行を読み込みができるようにフラグをセットします。
$file -> setFlags(SplFileObject::READ_CSV);
これで指定した CSV ファイルからのデ-タが取得可能となります。
$file の中にはオブジェクトとして CSV ファイルからのデ-タが格納されますので ここから配列として読み出します。
foreach は、配列を反復処理するための便利な方法です。
foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります。
foreach ($file as $key => $line)
と書くと各反復において現在の要素の値が $line に代入され、 さらに現在の要素のキーを変数 $keyに代入します。
そして、 内部配列ポインタが一つ前に進められます。
よって、次の反復では次の要素を見ることになります。
もし、
foreach($line as $str)
と書くと各反復において現在の要素の値が $strに代入され、 内部配列ポインタが一つ前に進められます。

  foreach($file as $key=>$line){
   foreach($line as $str){
    $records[$key][] = $str; 
   }
  }

具体的には $key は 0~1~2~3~ のように変化していきます。
例えば $key = 1 のとき
$records[$key][1] = 月
となります。

文字化け防止-必要なし

前項 CSV ファイルの読み込み過程で
$str1 = mb_convert_encoding
 ($str,"UTF-8","sjis-win");
なる命令は必要ありません。
必要なデ-タは全て半角数字だからです。
エクセルで CSV ファイルを作成すると文字コ-ドは SHIFT-JIS で保存されています。
正確に言うと sjis-win で保存されているようです。
でも、半角数字は SHIFT-JIS も UTF-8 も同じコ-ドなので、変換は必要ありません。

必要なデ-タを for 文で抜き取る

必要なグラフ値デ-タを読み出した CSV デ-タ $records[ ][ ] から抜き出します。
CSV デ-タの構成は、

エクセルファイルサンプル

のようになっていますので、グラフを描くのに必要な縦軸デ-タは
[2][2]=10.0~[7][6]=4.0 の 6×5 = 30個のデ-タ
であることがわかります。
よって、これらのデ-タを for 文で抜き出して
縦軸デ-タ配列 $data[0][0]~$data[5][4]
に入れます。
これをファイル化すると


 for ($i = 2; $i < 7; $i++) {
 //必要デ-タ数 2~6 = 5個
  for ($j = 2; $j < 8; $j++) {
 //必要デ-タ数 2~7 = 6個
   $data[$i-2][$j-2] 
    = $records[$j][$i];
  }
 }

となります。
次ぎに横軸デ-タを抜き出します。
横軸デ-タは
月の列 [2][1]=1~[7][1]=7 の 6個のデ-タ
ですので、これらのデ-タも for 文で抜き出して
横軸デ-タ配列 $x[0]~$x[5]
に入れます。
これをファイル化すると


 for ($j = 2; $j < 8; $j++) {
 //必要横デ-タ数 2~7 = 6個
  $x[$j-2] = $records[$j][1];
 }

となり、Image_Graph 汎用 PHP ファイルでは直接行っていた表示デ-タの設定を CSV ファイルから読み込むよう変更することができました。
残りの後半部分は保存するグラフのファイル名を
$filename = 'img/p_gra-62-csv.png';
に変更している部分を除き、Image_Graph 汎用 PHP ファイルと同じです。
これで、Image_Graph 汎用ファイルとの差分説明は終わりです。

引き続き、作成したファイルの動作確認をしていきます。


Image_Graph その3 動作確認 に続く
Image_Graph CSV 読込グラフ概要 に戻る

63Pear Villageに戻る