【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);
}
}
}