fgetcsv

関数の概要

fgetcsvは、PHPでCSV(カンマ区切り値)ファイルを1行ずつ読み込み、その行を配列として取得するための関数です。ファイルポインタから読み込むため、大きなCSVファイルもメモリ効率よく処理でき、1行単位で扱うことができます。主にCSVのデータを1行ずつ処理したい場合に利用されます。

パラメータの説明

  • resource $handlefopenなどで取得したファイルポインタ。
  • 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形式に対応できます。大きなファイルを扱う際でもメモリに優しいため、実務でもよく使われるファイル操作の基本関数の一つです。