本文 |
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行とみなして戻します。 奇数個であればセル内改行に入ったとみなし次行を取得、再度奇数個の行が出現するまで取得を続けます。
|