volcanus / csv-parser
CSV Parser for SplFileObject
Installs: 8 708
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- php: ^8.1
- ext-ctype: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-11-27 07:31:04 UTC
README
CSV文字列の解析を行うためのPHPクラスライブラリです。
Standard PHP Library (SPL) のファイル入出力用クラス SplFileObject と組み合わせることで、簡単にファイルからの読み込みを行えます。
Volcanus_Csv からの派生物で、CSV入力に関する最低限の機能を移植しています。
環境
- PHP 8.1以降
- mbstring拡張
使い方
<?php $parser = new \Volcanus\CsvParser\CsvParser([ 'delimiter' => ',', 'enclosure' => '"', 'escape' => '"', 'inputEncoding' => 'SJIS', 'outputEncoding' => 'UTF-8', 'sanitizing' => true, ]); $csvFile = new \SplFileObject('php://temp', '+r'); $csvFile->fwrite(mb_convert_encoding("1,田中\r\n", 'SJIS', 'UTF-8')); $csvFile->fwrite(mb_convert_encoding("2,山田\r\n", 'SJIS', 'UTF-8')); $csvFile->fwrite(mb_convert_encoding("3,鈴木\r\n", 'SJIS', 'UTF-8')); $csvFile->rewind(); $users = []; foreach ($csvFile as $line) { // 1件分のレコード取得が終了するまで各行をパース if (!$parser->parse($line)) { continue; } $csv = $parser->getBuffer(); $row = $parser->convert($csv); // 空行にはNULLが返されるので無視 if (is_null($row)) { continue; } // CSVのフィールドをオブジェクトに取得 $user = new \stdClass(); $user->id = $row[0]; $user->name = $row[1]; $users[] = $user; } echo $users[0]->id; // 1 echo $users[0]->name; // 田中 echo $users[1]->id; // 2 echo $users[1]->name; // 山田 echo $users[2]->id; // 3 echo $users[2]->name; // 鈴木
注意点
SplFileObjectを前提としていますが、CSVの加工は独自の処理を行なっています。 そのため、SplFileObject::setCsvControl() で設定した値は利用されません。 また、fgetcsv() , SplFileObject::fgetcsv() , str_getcsv() といったPHP標準の関数とは異なる結果を返す可能性があります。
復帰・改行・水平タブ・スペース以外の制御コードを自動で削除するサニタイジング機能を備えていますが、初期設定では無効になっています。
設定値の取得にはプロパティアクセス、配列アクセスを利用できますが、設定値のセットには利用できません。 コンストラクタのパラメータで指定するか、config()メソッドを呼ぶ必要があります。