我需要快速逐行读取大型csv文件,并将字段划分成一个数组。csv文件有10万行。// Example 1, works in 3.5 secondsif(false !== $handle = fopen("data.csv", "r")) { while(($data = fgetcsv($handle, 0, ";"))) { $arData[] = $data; }}// Example 2, works in 0.3 secondsif(false !== $handle = fopen("data.csv", "r")) { while(($data = fgets($handle))) { $arData[] = explode(";", $data); }}为什么速度差异如此严重?还是我做错了什么?该文档说,fgetcsv该函数与相似fgets,只是将结果分成一个数组。
1 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
fgetcsv 不会简单地将行换成新行和逗号...而是从头到尾逐个字符地解析文件,处理特殊情况,例如:
aaa,"bbb
ccc",ddd
和:
aaa,"bbb,ccc",ddd
(以上两项均应导致1x3数组)。它应该比简单的+慢。fgetsexplode
- 1 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消