目次
1. 本記事のポイント
- PHPでCSVファイルを読み込み、配列として扱う基本的な方法を解説
fgetcsv()
の使用例と注意点を具体的に紹介- 実務での使い方とよくある落とし穴もあわせて説明
2. PHPでCSVファイルを読み込んで配列に変換するとは?
PHPでは、CSV(Comma-Separated Values)ファイルを簡単に読み込んで配列として扱うことができます。CSVは構造がシンプルなため、データのやり取りや設定ファイルとしてよく用いられます。
PHP標準関数のfgetcsv()
は、CSVファイルの各行を配列として読み込む機能を提供しており、1行ごとに区切り文字で分割された値を配列形式で取得できます。これをループ処理で繰り返すことで、CSV全体を配列として扱えるようになります。
この機能は、データ移行・インポート処理・設定値の外部管理など、さまざまな実務シーンで使用されます。特にデータベースに投入する前のバリデーション処理などと組み合わせて使われることが多く、基本的な使い方を理解しておくことが重要です。
3. 詳細解説
基本的な読み込み処理
もっともシンプルな形式として、1行ずつCSVを読み込んで2次元配列に格納する例を示します。
PHP
<?php
// CSVファイルのパス(相対パスまたは絶対パス)
$csvFile = 'data.csv';
$data = [];
// ファイルを開く(読み取りモード)
if (($handle = fopen($csvFile, 'r')) !== false) {
while (($row = fgetcsv($handle)) !== false) {
$data[] = $row; // 各行を配列として$dataに追加
}
fclose($handle);
}
print_r($data); // 出力例確認用
出力例:
PHP
Array (
[0] => Array ([0] => id [1] => name [2] => age)
[1] => Array ([0] => 1 [1] => Tanaka [2] => 28)
[2] => Array ([0] => 2 [1] => Sato [2] => 35)
)
ヘッダー付きで連想配列に変換
CSVの1行目をキーとして、連想配列形式に整形するパターンです。
PHP
<?php
$csvFile = 'data.csv';
$data = [];
if (($handle = fopen($csvFile, 'r')) !== false) {
$headers = fgetcsv($handle); // 1行目をキーとして取得
while (($row = fgetcsv($handle)) !== false) {
$data[] = array_combine($headers, $row); // キーと値を組み合わせ
}
fclose($handle);
}
print_r($data);
出力例:
PHP
Array (
[0] => Array ([id] => 1 [name] => Tanaka [age] => 28)
[1] => Array ([id] => 2 [name] => Sato [age] => 35)
)
区切り文字がカンマ以外の場合
TSV(タブ区切り)など、カンマ以外の区切り文字を使用している場合は第2引数で指定します。
PHP
<?php
$csvFile = 'data.tsv';
$data = [];
if (($handle = fopen($csvFile, 'r')) !== false) {
while (($row = fgetcsv($handle, 0, "\t")) !== false) {
$data[] = $row;
}
fclose($handle);
}
print_r($data);
区切り文字は、Excelで作成されたCSVの場合に自動で変更されていることもあるため、事前確認が必要です。
4. よくあるミス・誤解・落とし穴
- ファイルの文字コードが
Shift_JIS
などの場合、fgetcsv()
で文字化けが発生する可能性があります。事前にmb_convert_encoding()
等で変換することが推奨されます。 array_combine()
を使う際、要素数が一致していないとfalse
を返します。CSVの列数が正しいかを事前に検証する必要があります。- Windows環境では、改行コードの違い(CRLF)により行末に余分な空白が含まれることがあります。
rtrim()
などで処理を行うと安定します。 - ファイルを開いた後は
fclose()
を忘れずに。ファイルロックやリソースリークの原因になります。
5. まとめ
PHPのfgetcsv()
関数を使えば、CSVファイルを簡潔に配列として取り込むことができます。
連想配列として扱う場合はarray_combine()
と組み合わせるのが一般的で、ヘッダー行の有無や区切り文字にも注意が必要です。
文字コード・列数・改行など、細かい違いによって処理が失敗することもあるため、前処理や例外対応を含めた実装を心がけましょう。