[PHP]CSVファイルの内容を取得して配列にする

色々調べた結果、最終的に下記のコードになった。

// ローカル上のファイル名を定義
$csv = '';

// SJISのCSVファイルをUTF-8変換
file_put_contents($csv, mb_convert_encoding(file_get_contents($csv), 'UTF-8', 'SJIS'));

// CSVファイルの内容を取得
$file = new SplFileObject($csv, 'r');
$file->setFlags(SplFileObject::READ_CSV);
$header = [];
foreach ($file as $row) {
    // 最終行をスキップ
    if ($row === null) continue;
    // ヘッダーを取得
    if (empty($header)) {
        $header = $row;
        continue;
    }

    // csvヘッダーをキーにして値を格納
    $item[] = array_combine($header, $row);
}

今回は文字コードがSJISのCSVファイルを扱ったので、まずUTF-8に変換してからCSVファイルの内容を取得する処理を実行している。
CSVの内容を取得するにあたって下記の記事を参考にした。

array_combine()でヘッダーをキーにして対応する値をセットしている。(便利で助かった。。。)

参考

PHPでSJISのCSVを読み込んでUTF-8として処理する場合のサンプルコード

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

18 − seven =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください