PHP では CSV ファイルを読み込み関数が用意されていますので、容易に CSV ファイルを読み込むことができます。ここでは、fgetcsv 関数を使用する方法と SplFileObject クラスを使用した2種類の方法で読み込むサンプルコードを掲載しています。
スポンサーリンク
サンプルデータ
ここで掲載するサンプルコードでは以下の csv ファイルを読み込むことにします。
"データ11", "データ12", "データ13", "データ14" "データ21", "データ22", "データ31", "データ32", "データ33", "データ34", "データ35" ← 改行なし
fgetcsv 関数を使用する
$row = 1; if (($handle = fopen("/path/to/data.csv", "r")) !== false) { while (($data = fgetcsv($handle, 1000, ",")) !== false) { // 1行当たりのデータ数を取得 $num = count($data); // 取得データを出力 echo "$num fields in line $row: "; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . (($num - 1 === $c) ? "" : ", "); } echo "\n"; } fclose($handle); } // 出力結果 //--------------------------------------------------------------- // 4 fields in line 1: // データ11, データ12, データ13, データ14 // // 1 fields in line 2: // // 3 fields in line 3: // データ21, データ22, // // 5 fields in line 4: // データ31, データ32, データ33, データ34, データ35
SplFileObject クラスを使用する
$row = 1; $file = new SplFileObject("/path/to/data.csv"); $file->setFlags(SplFileObject::READ_CSV); /* * 以下のように SplFileObject::SKIP_EMPTY フラグも設定しても * 空行はスキップしてくれない */ // $file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY); foreach ($file as $data) { // 1行当たりのデータ数を取得 $num = count($data); // 取得データを出力 echo "$num fields in line $row: "; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . (($num - 1 === $c) ? "" : ", "); } echo "\n"; } // 出力結果 //--------------------------------------------------------------- // 4 fields in line 1: // データ11, データ12, データ13, データ14 // // 1 fields in line 2: // // 3 fields in line 3: // データ21, データ22, // // 5 fields in line 4: // データ31, データ32, データ33, データ34, データ35
ポイント
ここで使用したサンプルデータの最終行には改行が入っていないものを使用しました。最終行に改行が入っているデータを SplFileObject クラスを使用して読み込んだ場合、 EOF のみの最終行も読み込まれてしまうので全部で 5行として扱われます。fgetcsv 関数を使用した場合は csv データの最終行に改行があった場合でも 4行として扱われます。
参考