猿问

为什么fgets +爆炸比fgetcsv快?

我需要快速逐行读取大型csv文件,并将字段划分成一个数组。csv文件有10万行。


// Example 1, works in 3.5 seconds

if(false !== $handle = fopen("data.csv", "r")) {

    while(($data = fgetcsv($handle, 0, ";"))) {

        $arData[] = $data;

    }

}


// Example 2, works in 0.3 seconds

if(false !== $handle = fopen("data.csv", "r")) {

    while(($data = fgets($handle))) {

        $arData[] = explode(";", $data);

    }

}

为什么速度差异如此严重?还是我做错了什么?


该文档说,fgetcsv该函数与相似fgets,只是将结果分成一个数组。


猛跑小猪
浏览 174回答 1
1回答

扬帆大鱼

fgetcsv 不会简单地将行换成新行和逗号...而是从头到尾逐个字符地解析文件,处理特殊情况,例如:aaa,"bbbccc",ddd和:aaa,"bbb,ccc",ddd(以上两项均应导致1x3数组)。它应该比简单的+慢。fgetsexplode
随时随地看视频慕课网APP
我要回答