phpからyamlファイルを読む機会があったのですが、symfony/yamlパッケージを使ってみたら便利でした。
パッケージ名に"symfony"とついていますが、symfonyフレームワークを使わなくても、このパッケージだけ単独で利用できます。
symfonyで開発をしている場合は、最初から入っているので別途インストールは不要かと思います。
インストール
composerから、下記のコマンド一発でインストールできます。
> composer require symfony/yaml
インストールが成功すると、composer requireコマンドを実行したディレクトリに下記のファイルが作成されます。
composer.json
composer.lock
vendor/*
インストール後にcomposer showコマンドでパッケージ一覧を見ると以下の通り、1つだけでした。他の依存しているパッケージもなく、シンプルなのは良いところです
> composer show
symfony/yaml v3.3.4 Symfony Yaml Component
yaml読み込みのサンプルコード
comopoerコマンドを実行したフォルダに、test.phpを以下の内容で作成します。
<?php
require "vendor/autoload.php";
$input = '{foo:"bar"}';
$result = \Symfony\Component\Yaml\Yaml::parse($input);
var_dump($result);
実行結果は以下の通りです。これだけのコードで、yamlファイルを解析してPHPのオブジェクトに変換できました。
array(1) {
["foo"]=>
string(3) "bar"
}
外部ファイルから読み込む
外部ファイルからの読み込みはサポートしていないようなので、自分でfile_get_contents()等で読み込んでから実行します。
<?php
require "vendor/autoload.php";
$input = file_get_contents("test.yaml");
$result = \Symfony\Component\Yaml\Yaml::parse($input);
var_dump($result);
今回の読み込みに使ったファイルは以下の内容です。
# test.yaml
items:
item1: a
item2: b
スクリプトの出力結果は以下の通りです。
array(1) {
["items"]=>
array(2) {
["item1"]=>
string(1) "a"
["item2"]=>
string(1) "b"
}
}
外部ファイルから読み込む
逆に、PHPのデータ構造からyamlテキストへのエンコードをする時は、Yaml::dump()メソッドを利用します。
<?php
require "vendor/autoload.php";
$data = [
'items' => [
[ 'name' => 'item001', 'amount' => 20, ],
[ 'name' => 'item002', 'amount' => 50, ],
]
];
$result = \Symfony\Component\Yaml\Yaml::dump($data);
echo $result;
実行すると、以下の様にyamlテキストになりました。
items:
- { name: item001, amount: 20 }
- { name: item002, amount: 50 }
こちらもおススメ