【サクッと解説】PHPでCSVファイルを配列に変換する方法

目次

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()と組み合わせるのが一般的で、ヘッダー行の有無や区切り文字にも注意が必要です。
文字コード・列数・改行など、細かい違いによって処理が失敗することもあるため、前処理や例外対応を含めた実装を心がけましょう。

よかったらシェアしてね!
  • URLをコピーしました!
目次