CVS 入出力 を支援する PEAR パッケージ

PHP5.1 以降には fgetcsv(), fputcsv() という関数が標準で提供されていますが、別の選択肢として PEAR でも File_CSV というクラスが提供されています。
 
このクラスは File パッケージに含まれています。

pear install File

 
■利用例(tests/parser.php を改変したもの)
ファイルから読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
while ($fields = File_CSV::read($file, $conf)) { // 取得したデータ構造を利用して行単位で読み取る
    print_r($fields);
}

ファイルから配列に読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
while ($fields = File_CSV::read($file, $conf)) { // 取得したデータ構造を利用して行単位で読み取る
    print_r($fields);
}

CSV ファイルの中身をすべて配列として読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
while ($fields = File_CSV::read($file, $conf)) { // 取得したデータ構造を利用して行単位で読み取る
    print_r($fields);
}

ファイルから配列に読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
$data = File_CSV::readAll($file, $conf); // 取得したデータ構造を利用し、配列として全て取得する。
var_dump($data);
<<
ファイルに書きこむ例:

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
// 書き込む内容
$data = array(
array(“foo”, “boo”, “woo”),
array(“fo\”o”, “bo,o”, “woo”), // エスケープが必要な文字を含むレコード
);
// CSV 書式
$conf = array(
    ‘fields’ => count($data[0]), // カラム数
    ‘sep’ => “,”, // 区切り子
    ‘quote’ => ‘”‘, // 囲み文字
    // ‘header’ => false, // NULL 以外を指定すると, read 時に一行目をヘッダとみなして各要素のキーとして扱う
);
// 書きこみ実行
foreach($data as $row) {
    File_CSV::write($file, $row, $conf); //
}

 
ファイルの書きこみ制御ができなかったり、設計上気になる点もありますが、
単純に読み書きするのには十分そうです。