🐈
Larevelで/csvにアクセスしたらCSV入出力をするミニマムなアプリを作ってみる
はじめに
LaravelでCSVを使う案件にアサインされたので、とりあえずドキュメントを見ながらミニマムなものを作成してみました。
PHP: SplFileObject - Manual https://www.php.net/manual/ja/class.splfileobject.php
やってみたこと
- Laravelプロジェクトを作成
$ composer create-project laravel/laravel laravel-csv
- とりあえずLaravelが動くことを確認
$ cd laravel-csv/
$ php artisan serve
こんな画面が出るはず
- テスト読み込み用のcsvを作成
$ mkdir csv
$ touch test.csv
test.csv
kato1,15,male
kato2,25,male
kato3,35,female
- routeを追加
web.php
Route::get('/csv', function () {
// 読み込み
$read_file = "../csv/test.csv";
$csv_array = [];
$csv = new \SplFileObject($read_file);
$csv->setFlags(
\SplFileObject::READ_CSV | // CSV 列として行を読み込む
\SplFileObject::READ_AHEAD | // 先読み/巻き戻しで読み出す
\SplFileObject::SKIP_EMPTY | // 空行は読み飛ばす
\SplFileObject::DROP_NEW_LINE // 行末の改行を読み飛ばす
);
foreach ($csv as $index => $row) {
$csv_array[$index]['name'] = $row[0];
$csv_array[$index]['age'] = $row[1];
$csv_array[$index]['gender'] = $row[2];
}
print_r('<pre>');
print_r($csv_array);
print_r('</pre>');
// 書き込み
$save_file = '../csv/save.csv';
$file = new \SplFileObject($save_file, 'w'); // ファイルが無ければ作成
$file->setCsvControl(","); // カンマ区切り
$data = [];
$data[] = ['sato1', '15', 'male'];
$data[] = ['sato2', '25', 'male'];
$data[] = ['sato3', '35', 'female'];
foreach ($data as $row) {
$file->fputcsv($row);
}
print_r('<pre>');
print_r($file);
print_r('</pre>');
});
- 実行してみる
$ php artisan serve
localhost:8000/csv
にアクセスするとこんな画面表示になる
csvファイルが出力されている
$ cat csv/save.csv
sato1,15,male
sato2,25,male
sato3,35,female
おわりに
とりあえずできました。あとはここから機能を作り込んで行きたいと思います。
僕と同じように初めて使う人の参考になれば嬉しいです。
参考
- PHP: SplFileObject - Manual https://www.php.net/manual/ja/class.splfileobject.php
Discussion