LoginSignup
18
21

More than 3 years have passed since last update.

laravelでcsvファイルImportするだなも

Posted at

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 クラス使おう

世の中には便利な機能があるもんで、空行読み飛ばしてくれたり面倒なことは全部彼がやってくれます。

SplFileObjectクラスのドキュメント

まとめ

基本的にはこれでcsvの中身を取ってこれます。
基礎的な箇所のみまとめたのでエラーハンドリングとかバリデーションとかは今回省いてます。
こっからは実装したいものによって拡張して下さい。

次はexport書きます。

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21