fgetcsv

(PHP 4, PHP 5, PHP 7)

fgetcsvファイルポインタから行を取得し、CSVフィールドを処理する

説明

fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]] ) : array

fgets() に動作は似ていますが、 fgetcsv() は行を CSV フォーマットのフィールドとして読込み処理を行い、 読み込んだフィールドを含む配列を返すという違いがあります。

注意:

この関数はロケール設定を考慮します。もし LC_CTYPE が例えば en_US.UTF-8 の場合、 1 バイトエンコーディングのファイルは間違って読み込まれるかもしれません。

パラメータ

handle

ファイルポインタは有効なものでなければならず、また fopen(), popen(), もしくは fsockopen() で正常にオープンされたファイルを指している必要があります。

length

(行末文字を考慮して) CSV ファイルにある最も長い行よりも大きい必要があります。 そうでない場合は、ひとつの行が length 文字ずつのチャンクに分割されてしまいます。 ただし、フィールド囲いこみ文字の内部では、この分割は発生しません。

このパラメータを省略 (もしくは PHP 5.1.0 以降で 0 を設定) すると、 最大行長は制限されません。この場合、若干動作が遅くなります。

delimiter

オプションの delimiter パラメータで、フィールドのデリミタ (1 文字のみ) を設定します。

enclosure

オプションの enclosure パラメータで、フィールド囲いこみ文字 (1 文字のみ) を設定します。

escape

オプションの escape パラメータで、エスケープ文字 (1 文字のみ) を設定します。

注意: Usually an enclosure character is escpaped inside a field by doubling it; however, the escape character can be used as an alternative. So for the default parameter values "" and \" have the same meaning. Other than allowing to escape the enclosure character the escape character has no special meaning; it isn't even meant to escape itself.

返り値

読み込んだフィールドの内容を含む数値添字配列を返します。

注意:

CSV ファイルの空行は null フィールドを一つだけ含む配列として返され、 エラーにはなりません。

注意: マッキントッシュコンピュータ上で作成されたファイルを読み込む際に、 PHP が行末を認識できないという問題が発生した場合、 実行時の設定オプションauto_detect_line_endings を有効にする必要が生じるかもしれません。

fgetcsv() は、無効な handle を受け取った場合に NULL を返します。 また、ファイルの終端に達した場合を含めたその他のエラー時には FALSE を返します。

変更履歴

バージョン 説明
5.3.0 escape パラメータが追加されました。
5.1.0 length が必須ではなくなりました。 デフォルトは 0 で、これは長さの制限がないことを表します。
4.3.5 fgetcsv() はバイナリセーフとなりました。

例1 CSV ファイルの全てのコンテンツを読み込み、表示する

<?php
$row 
1;
if ((
$handle fopen("test.csv""r")) !== FALSE) {
    while ((
$data fgetcsv($handle1000",")) !== FALSE) {
        
$num count($data);
        echo 
"<p> $num fields in line $row: <br /></p>\n";
        
$row++;
        for (
$c=0$c $num$c++) {
            echo 
$data[$c] . "<br />\n";
        }
    }
    
fclose($handle);
}
?>

参考

  • str_getcsv() - CSV 文字列をパースして配列に格納する
  • explode() - 文字列を文字列により分割する
  • file() - ファイル全体を読み込んで配列に格納する
  • pack() - データをバイナリ文字列にパックする
  • fputcsv() - 行を CSV 形式にフォーマットし、ファイルポインタに書き込む