[PHP]fgetcsv関数の使い方とCSVファイル読み込みのコツを徹底解説!

PHP

こんにちは!今回は、PHPでCSVファイルを読み込む際に重宝する「fgetcsv関数」について、実践的な使い方を解説していきます。

fgetcsv関数とは?

fgetcsv関数は、CSVファイルから1行ずつデータを読み込み、配列として返してくれる便利な関数です。特にデータ処理やインポート機能の実装時に大活躍します。

基本的な構文

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

主なパラメータ

  • $handle: ファイルポインタ(必須)
  • $length: 1行の最大長(省略可)
  • $delimiter: 区切り文字(デフォルトはカンマ)
  • $enclosure: フィールドの囲み文字(デフォルトはダブルクォーテーション)
  • $escape: エスケープ文字(デフォルトは\)

使用例

基本的な使い方

<?php
// CSVファイルを開く
$file = fopen("sample.csv", "r");

// 1行ずつ読み込む
while (($data = fgetcsv($file)) !== FALSE) {
    print_r($data);
}

// ファイルを閉じる
fclose($file);
?>

文字コード対応版

<?php
$file = fopen("sample.csv", "r");

// 文字コードをUTF-8に変換しながら読み込む
while (($data = fgetcsv($file)) !== FALSE) {
    $data = array_map('mb_convert_encoding', $data, array_fill(0, count($data), 'UTF-8'), array_fill(0, count($data), 'SJIS'));
    print_r($data);
}

fclose($file);
?>

よくあるつまずきポイントと解決方法

1. 文字化けする場合

CSVファイルの文字コードとPHPの実行環境の文字コードが異なる場合に発生します。

// mb_convert_encodingを使用して解決
$data = mb_convert_encoding($data, 'UTF-8', 'SJIS');

2. 空行が読み込まれる

データの最後に改行が入っている場合によく発生します。

while (($data = fgetcsv($file)) !== FALSE) {
    if (count($data) === 1 && empty($data[0])) continue;
    // 処理
}

実践的なテクニック

ヘッダー付きCSVの処理

<?php
$file = fopen("sample.csv", "r");

// ヘッダー行を読み込む
$headers = fgetcsv($file);

// データ行を読み込む
$result = [];
while (($data = fgetcsv($file)) !== FALSE) {
    $result[] = array_combine($headers, $data);
}

fclose($file);
?>

まとめ

fgetcsv関数は、CSVファイルを扱う際の強力な味方です。主な特徴をまとめると:

  • 簡単にCSVファイルを1行ずつ配列として読み込める
  • 区切り文字やエンクロージャーをカスタマイズ可能
  • 大容量ファイルも効率的に処理可能

ただし、文字コードの扱いには注意が必要です。適切な文字コード変換処理を組み合わせることで、より堅牢なCSV処理が実現できます。

以上、fgetcsv関数の解説でした!CSVファイルの処理でお困りの方の参考になれば幸いです。

関連情報

  • PHP公式マニュアル
  • CSVファイル処理のベストプラクティス
  • 文字コード処理について

ご質問やご意見がありましたら、コメント欄までお願いします!

タイトルとURLをコピーしました