RFC 4180対応版 CSVレコードの分解
Posted feedbacks - PHP
一旦','で分割してしまってから'"'が奇数個含まれるフィールドに偶数になるまで後ろのフィールドを繋ぎ直す様な感じでやってみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php
function splitcsv($line){
$r=array();
$a=explode(",",$line);
while(list(,$v)=each($a))
{ if(strpos($v,'"')!==false)
{ while(substr_count($v,'"')&1)
{ if(!(list(,$v1)=each($a)))
return false;
$v.=','.$v1;
}
ereg('"(.*)"',$v,$regs);
$v=str_replace('""','"',$regs[1]);
}
$r[]=$v;
}
return $r;
}
$line='"aaa","b
bb","ccc",zzz,"y""Y""y",xxx';
print_r(splitcsv($line));
?>
|
PHP 入出力ストリームと fgetcsvを使って簡単にやってみた
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php
function csv2array($csv)
{
$fp = fopen('php://temp/maxmemory:'.(5*1024*1024), 'r+');
fputs($fp, $csv);
rewind($fp);
return fgetcsv($fp);
}
$csv='"aaa","b
bb","ccc",zzz,"y""Y""y",xxx';
var_dump(csv2array($csv));
|


raynstard
#3389()
Rating1/1=1.00
[ reply ]