関数の概要
fgetcsvは、PHPでCSV(カンマ区切り値)ファイルを1行ずつ読み込み、その行を配列として取得するための関数です。ファイルポインタから読み込むため、大きなCSVファイルもメモリ効率よく処理でき、1行単位で扱うことができます。主にCSVのデータを1行ずつ処理したい場合に利用されます。
パラメータの説明
- resource $handle —
fopenなどで取得したファイルポインタ。 - int|null $length(任意) — 1行あたりの最大バイト数。省略可能で、PHP 5.1.0以降は通常は不要です。
- string $delimiter(任意) — フィールドの区切り文字。デフォルトはカンマ(
,)です。 - string $enclosure(任意) — フィールドを囲む文字。デフォルトはダブルクォーテーション(
")です。 - string $escape(任意) — エスケープ文字。デフォルトはバックスラッシュ(
)です。
戻り値
正常に読み込めた場合は1行のフィールドを要素とする配列を返します。ファイルの終端に達した場合やエラーがあった場合は false を返します。
使用例
基本的な使い方
<?php
$fp = fopen('sample.csv', 'r');
if ($fp !== false) {
while (($data = fgetcsv($fp)) !== false) {
print_r($data);
}
fclose($fp);
}
?>
この例では、sample.csvファイルを開いて1行ずつ読み込み、配列として内容を出力しています。
カンマ以外の区切り文字を指定する場合
<?php
$fp = fopen('tab_separated.csv', 'r');
if ($fp !== false) {
while (($data = fgetcsv($fp, 0, "t")) !== false) {
print_r($data);
}
fclose($fp);
}
?>
タブ区切りのファイルを読みたい場合、3つ目のパラメータに区切り文字を "t" と指定します。
囲み文字やエスケープ文字を変更する例
<?php
$fp = fopen('custom_enclosure.csv', 'r');
if ($fp !== false) {
while (($data = fgetcsv($fp, 0, ',', ''', '|')) !== false) {
print_r($data);
}
fclose($fp);
}
?>
この例では、フィールドの囲み文字としてシングルクォーテーション(')、エスケープ文字としてパイプ(|)を利用しています。
関連する関数
fopen— ファイルを開く関数。fgetcsvのファイルポインタ取得に使う。fputcsv— 配列をCSV形式でファイルに書き込む関数。feof— ファイルポインタがファイル終端に達したか確認する関数。fgets— ファイルから1行をテキストとして読み込む関数。
まとめ
fgetcsvは、CSVファイルを効率よく1行ずつ配列形式で読み込むための便利な関数です。区切り文字や囲み文字、エスケープ文字の指定も可能なので、多様なCSV形式に対応できます。大きなファイルを扱う際でもメモリに優しいため、実務でもよく使われるファイル操作の基本関数の一つです。
