csvファイルのインポート
今回はLaravelでのcsvインポート機能を簡単にまとめました。
結構使い回せるので自分のメモとしても。
また、今回は配列に入れて返すだけなので、DBに保存とかする場合はまた別の機会にまとめます。
CsvService.php
protected static $csv_header = [
'name', 'age', 'gender', 'height', 'weight'
];
private static function validateHeader($header)
{
return $header === self::$csv_header;
}
public static function csvImport($file)
{
$csv_array = [];
$csv = new \SplFileObject($file);
$csv->setFlags(
\SplFileObject::READ_CSV | // CSV 列として行を読み込みます。
\SplFileObject::READ_AHEAD | // 先読み/巻き戻しで読み出します。
\SplFileObject::SKIP_EMPTY | // ファイルの空行を読み飛ばします。この時READ_AHEAD フラグを有効に。
\SplFileObject::DROP_NEW_LINE // 行末の改行を読み飛ばします。
);
foreach ($csv as $index => $row) {
$row = Utf8BomService::remove($row); //BOM付いてたらBOM外す ここは別のServiceクラスで
if ($index === 0) {
if (! self::validateHeader($row)) {
return false;
}
continue;
}
$csv_array[$index]['name'] = $row[0];
$csv_array[$index]['age'] = $row[1];
$csv_array[$index]['gender'] = $row[2];
$csv_array[$index]['height'] = $row[3];
$csv_array[$index]['weight'] = $row[4];
}
return $csv_array;
}
SplFileObject クラス使おう
世の中には便利な機能があるもんで、空行読み飛ばしてくれたり面倒なことは全部彼がやってくれます。
まとめ
基本的にはこれでcsvの中身を取ってこれます。
基礎的な箇所のみまとめたのでエラーハンドリングとかバリデーションとかは今回省いてます。
こっからは実装したいものによって拡張して下さい。
次はexport書きます。