(PHP 4, PHP 5, PHP 7)
fgetcsv — ファイルポインタから行を取得し、CSVフィールドを処理する
$handle
[, int $length
= 0
[, string $delimiter
= ","
[, string $enclosure
= '"'
[, string $escape
= "\\"
]]]] ) : arrayfgets() に動作は似ていますが、 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, theescape
character can be used as an alternative. So for the default parameter values "" and \" have the same meaning. Other than allowing to escape theenclosure
character theescape
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($handle, 1000, ",")) !== 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);
}
?>