Tech
Webシステムプログラマーによる、ちょっとためになる(かもしれない)情報共有ブログ
 

【第30回】YAMLを扱う

 
今日はPHPでYAMLです。

YAMLは階層を表現する言語です。
最近はXML以外にもYAMLを使ってデータを扱うことも多くなってきました。

今日はPHPからYAMLを呼び出して表示してみます。
まずは、こちらからSPYCをダウンロードします。
http://code.google.com/p/spyc/

Downloadsからspyc-0.4.1.zip(現在の最新バージョン)をダウンロードします。

使うのは、spyc.phpのみです。

sprcという名前のフォルダを作成して、その中にspyc.phpを入れます。

sprc/spyc.php

PHP4の場合はphp4/spyc.php4というファイルを、spyc.phpにリネームしてsprc
フォルダの中に入れます。

準備はこれで完了。

あとは、YAMLデータを用意してデータを呼び出します。

sample.yml

dates:
  - 2009/05/29
  - 2009/05/28
  - 2009/05/27
titles:
  - たいとる1
  - たいとる2
  - たいとる3
contents:
  - YAMLについていろいろ書いています。
  - 今日は仕事がたくさんありました。
  - 風邪が流行っています。注意しましょう。


sample1.php

<?

// SPYCの読み込み
require_once('spyc/spyc.php');

// YAMLの読み込み
$data_list = Spyc::YAMLLoad('datas/sample.yml');

print_r($data_list);

?>

実行すると・・・

Array ( [dates] => Array ( [0] => 2009/05/22 [1] => 2009/05/21 [2] =>
2009/05/20 ) [titles] => Array ( [0] => たいとる1 [1] => たいとる2 [2]
=> たいとる3 ) [contents] => Array ( [0] => YAMLについていろいろ書いて
います。 [1] => 今日は仕事がたくさんありました。 [2] => 風邪が流行ってい
ます。注意しましょう。 ) )

このような形でYAML形式のデータが配列に格納されます。

あとは配列からデータを表示させるだけです。

sample2.php

<?

// SPYCの読み込み
require_once('spyc/spyc.php');

// YAMLの読み込み
$data_list = Spyc::YAMLLoad('datas/sample.yml');

for( $i = 0; $i < count($data_list); $i++ ){
    
    $html .= $data_list["titles"][$i];
    $html .= "<br>";
    $html .= $data_list["contents"][$i];
    $html .= "<br>";
    $html .= $data_list["dates"][$i];
    $html .= "<br><br>";
    
}

echo($html);
?>

これを実行すると・・・

たいとる1
YAMLについていろいろ書いています。
2009/05/29

たいとる2
今日は仕事がたくさんありました。
2009/05/28

たいとる3
風邪が流行っています。注意しましょう。
2009/05/27

YAML形式のデータを出力することができました。

次は配列を作ってYAML形式のデータを作ります。

さっきとは逆のパターンです。

次のプログラムを実行します。

sample3.php
<?

// SPYCの読み込み
require_once('spyc/spyc.php');

// SPYCの読み込み
require_once('spyc/spyc.php');

// データ作成
$data_array["date"][] = "2009/05/29";
$data_array["date"][] = "2009/05/28";
$data_array["date"][] = "2009/05/27";

$data_array["title"][] = "たいとる1";
$data_array["title"][] = "たいとる2";
$data_array["title"][] = "たいとる3";

$data_array["contents"][] = "YAMLについていろいろ書いています。";
$data_array["contents"][] = "今日は仕事がたくさんありました。";
$data_array["contents"][] = "風邪が流行っています。注意しましょう。";

// 配列をYAMLに変換
$yaml = Spyc::YAMLDump($data_array, 2 );

// YAMLのファイル出力
$fp = fopen("datas/sample3.yml", "w");
fwrite($fp, $yaml);
fclose($fp);

// YAMLの出力
echo("<pre>$yaml</pre>");

?>

これを実行すると・・・

---
date:
  - 2009/05/29
  - 2009/05/28
  - 2009/05/27
title:
  - たいとる1
  - たいとる2
  - たいとる3
contents:
  - YAMLについていろいろ書いています。
  - 今日は仕事がたくさんありました。
  - 風邪が流行っています。注意しましょう。

YAMLのデータに変換されました。

Spyc::YAMLDump()関数の2番目の引数の2はインデントの数です。

ここでは、インデントを2に設定しているので、半角2つ分のインデントで下位の
データが出力されています。

サンプルではyml形式のファイルにも出力してみました。

とても簡単にできますね。

今日はこれでおしまいです。

トラックバック(0)

トラックバックURL: http://blog.promob.jp/mt/mt-tb.cgi/154

コメントする