作成日:2018-06-19, 更新日:2018-11-09
基本
▼CSVとして読み込ませる(SplFileObject::READ_CSV)
$path = 〇〇〇; $file = new SplFileObject($path); $file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); $records = array(); foreach ($file as $line) { $records[] = $line; } var_dump($records);
※個人的に・・・空白行はいらないので「$file->setFlags()」で色々と設定した。空白行が欲しいなら「READ_CSV」だけで良いかも。
$file->setFlags()の中身
SplFileObject::DROP_NEW_LINE | 行末の改行を読み飛ばします。 |
---|---|
SplFileObject::READ_AHEAD | 先読み/巻き戻しで読み出します。 |
SplFileObject::SKIP_EMPTY | ファイルの空行を読み飛ばします。期待通りに動作させるには、READ_AHEAD フラグを有効にしないといけません。 |
SplFileObject::READ_CSV | CSV 列として行を読み込みます。 |
存在しないファイルの場合
例外処理が走ってくれるのでtry-catch()でくくってあげればOK
$path = 〇〇〇; try { $file = new SplFileObject($path); $file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); $records = array(); foreach ($file as $line) { $records[] = $line; } var_dump($records); } catch (Exception $e) { echo $e->getMessage(); }
TSVの読み込み
$path = 〇〇〇; $file = new SplFileObject($path); $file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); $file->setCsvControl("\t"); $records = array(); foreach ($file as $line) { $records[] = $line; } var_dump($records);
メモ
「fgetcsv()」を使う方法もあるが遅いそうだ。
$path = 〇〇〇; $file = new SplFileObject($path); $records = array(); while (!$file->eof()) { $records[] = $file->fgetcsv(); } var_dump($records);
関連項目
・PHP ファイルから各行を取得して何かしたい(SplFileObject())、LimitIterator())
・CSVファイルの読込み前に文字コード変換(SplFileObject())