SplFileObject::fgetcsv
ファイルから行を取り出し CSV フィールドとして処理する
説明
public arrayfalse SplFileObject::fgetcsv(string $separator
= ",", string $enclosure
= "\"", string $escape
= "\\")
注意:
この関数はロケール設定を考慮します。
例えば、LC_CTYPE
が en_US.UTF-8
の場合、
1 バイトエンコーディングでエンコードされたデータが
間違って処理されるかもしれません。
パラメータ
-
separator
-
フィールドの区切り文字 (シングルバイト文字 1 文字のみ)。
デフォルトはカンマ(,
)、 もしくは事前に
SplFileObject::setCsvControl を呼び出してセットされた値です。
-
enclosure
-
フィールド囲み文字 (シングルバイト文字 1 文字のみ)。
デフォルトはダブルクォート("
)、もしくは事前に
SplFileObject::setCsvControl を呼び出してセットされた値です。
-
escape
-
エスケープ文字 (シングルバイト文字 最大で1文字)。
デフォルトはバックスラッシュ(\
)、 もしくは事前に
SplFileObject::setCsvControl を呼び出してセットされた値です。
空文字列(""
)の場合、(RFC 4180 に準拠していない) 独自仕様のエスケープ機構が無効になります。
注意:
enclosure
の文字は、フィールド内で2回出力される
ことでエスケープされます。しかし、
escape
文字はその代替として使えます。
デフォルトのパラメータの値
""
と \"
は同じ意味を持ちます。
enclosure
の文字を
escape
文字でエスケープすることには、
特別な意味はありません。それ自身をエスケープする意味ですらありません。
警告
PHP 8.4.0 以降では、escape
のデフォルト値に依存することは非推奨となりました。
位置指定の引数か、名前付き引数を使用するか、
あるいは SplFileObject::setCsvControl
を呼び出して、明示的に指定する必要があります。
警告
escape
が空の文字列(""
)以外に設定されているとき、
» RFC 4180
に準拠しない CSV が生成されたり、PHP の CSV
関数を介してラウンドトリップ(往復変換)でデータが壊れる可能性があります。
escape
のデフォルト値は"\\"
なので、明示的に空の文字列を指定することを推奨します。デフォルト値は、PHP 9.0
以降の将来のバージョンで変更予定です。
戻り値
読み込まれたフィールドを含む数値添字配列もしくはエラーのときは false
を返します。
注意:
CSV ファイルの空白行は SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE
を使わない限り単独の null
フィールドで構成される配列として返され、この場合空白行は読み飛ばされます。
エラー / 例外
separator
または enclosure
が
1 バイト長ではない場合、ValueError をスローします。
escape
が 1 バイト長、または空文字列ではない場合、
ValueError をスローします。
例
例1 SplFileObject::fgetcsv の例
<?php
$file = new SplFileObject("data.csv");
while (!$file->eof()) {
var_dump($file->fgetcsv());
}
?>
例2 SplFileObject::READ_CSV
の例
<?php
$file = new SplFileObject("animals.csv");
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
list($animal, $class, $legs) = $row;
printf("A %s is a %s with %d legs\n", $animal, $class, $legs);
}
?>
crocodile,reptile,4
dolphin,mammal,0
duck,bird,2
koala,mammal,4
salmon,fish,0
A crocodile is a reptile with 4 legs
A dolphin is a mammal with 0 legs
A duck is a bird with 2 legs
A koala is a mammal with 4 legs
A salmon is a fish with 0 legs
参考
- SplFileObject::fputcsv
- SplFileObject::setCsvControl
- SplFileObject::getCsvControl
- SplFileObject::setFlags
SplFileObject::READ_CSV
- SplFileObject::current
- fputcsv
- fgetcsv
- str_getcsv