しばしばExcelファイルなどのTSVにしやすい形式で設定値等を得ることがあります。この設定値をPHP内で使う時、特にLaravelで使う時などは配列形式にすることが多いです。この変換処理を行うPHPスクリプトを紹介します。
紹介するスクリプトは、SV形式のデータ(例:ExcelやGoogleスプレッドシートからエクスポートされたもの)を読み取り、それをPHPの設定ファイルとして出力します。TSVデータは次の形式を想定しています。
code1 名称1 code2 名称2
もしコードと名称が逆なら array_flip で対処できます。
実際のコードと使用例が次です。
<?php
/*
* TSV を元に、コードと名称の配列PHPを作成する
*/
/**
* TSV文字列を元に、コードと名称のPHP配列ファイルを出力する
*
* @param string $tsv TSV形式の文字列
* @param string $dist 出力先のファイルパス
*/
function dumpTsv2PhpArr(string $tsv, string $dist): void {
// 改行でTSV文字列を行毎に分割
$lines = explode("\n", $tsv);
// 空の行を削除
$lines = array_filter($lines, function($line) {
return !empty($line);
});
// 各行をタブで分割して、コードと名称を取得
$lines = array_map(function($line) {
return explode("\t", $line);
}, $lines);
// キーとして'code'と'name'を持つ連想配列に変換
$lines = array_map(function($line) {
return [
'code' => $line[0],
'name' => $line[1],
];
}, $lines);
// PHPの連想配列の形式にフォーマット
$lines = array_map(function($line) {
return sprintf(" '%s' => '%s'", $line['code'], $line['name']);
}, $lines);
// 配列の要素を連結
$lines = implode(",\n", $lines);
// PHPの配列の形式で文字列を構築
$lines = "<?php\nreturn [\n".$lines."\n];";
// ファイルに書き込み
file_put_contents($dist, $lines);
}
/**
* TSVファイルを元に、コードと名称のPHP配列ファイルを出力する
*
* @param string $filePath TSVファイルのパス
* @param string $dist 出力先のファイルパス
*/
function dumpTsv2PhpArrFromFile(string $filePath, string $dist): void {
// TSVファイルを読み込み
$tsv = file_get_contents($filePath);
// TSV内容を元にPHP配列ファイルを出力
dumpTsv2PhpArr($tsv, $dist);
}
// 使用例: サンプルとして'tmp.tsv'ファイルを読み、'country_code.php'に変換して保存
dumpTsv2PhpArrFromFile(__DIR__.'/tmp.tsv', __DIR__.'/config/const/country_code.php');
それほど出番があるわけではありませんがコピペと手打ちによる加工をするよりはずっと楽になります。