【PHP】CSV をヘッダーをキーにした連想配列で読み込む

概要

以下のような 1 行目がヘッダーになっている CSV を、ヘッダーをキーにした連想配列で読み込みます。

id,value
1,value1
2,value2
$csv = [
    ['id' => '1', 'value' => 'value1'],
    ['id' => '2', 'value' => 'value2'],
];

コード

  • ジェネレータ関数で実装
  • 1 行目を変数に格納
  • 2 行目以降を 1 行目と array_combine して yield
/**
 * @return Generator<array>
 */
function iterCsvRow(SplFileObject $f): Generator
{
    $f->setFlags(SplFileObject::DROP_NEW_LINE | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::READ_CSV);

    $header = [];
    foreach($f as $i => $r) {
        if ($i === 0) {
            $header = $r;
        } else {
            yield array_combine($header, $r);
        }
    }
}