ファイルハンドルからCSVを読み込み配列で返す #PHP

日付 2023.02.15
タイトル ファイルハンドルからCSVを読み込み配列で返す #PHP
本文
function read_csv($fh) {
$buf = null;
$in_quote = false;
while (($lin = fgets($fh)) !== false) {
$buf = !isset($buf) ? $lin : $buf.$lin;
$in_quote = (substr_count($lin, '"') & 0b1) ? !$in_quote : $in_quote;
if (!$in_quote) {
break;
}
}

return $buf;
}

セル内に改行の入る形式のCSVも扱えます。
ファイルハンドルからCSV一行分を取得しセルの配列を返します(セル中に改行を含む場合は複数行分ファイルポインタが進みます)。

一行の中のダブルクオートを数え偶数個であれば完結したCSV行とみなして戻します。
奇数個であればセル内改行に入ったとみなし次行を取得、再度奇数個の行が出現するまで取得を続けます。