fgetcsv与fgets&的区别速差

时间:2015-05-26 09:12:42

标签: php fgets fgetcsv

我正在阅读文本文件,试图以最快的方式读取文件并逐行将它们放入数组中。

我使用的一些文件是.csv文件,还有一些是.txt文件。当我开始时,我找到了一个读取csv文件的例子,所以我开始使用它,但我很快发现fgets明显更快。 fgetcsvValues是我创建的第一个,fgetsValues是第二个/更快的一个。

我通过第一个参数$ chars作为数组输入文件。所以例如,这将是我使用的数组

$dictionaryfiles = array(
    'dictionaries/Dutch.csv'
    ,'dictionaries/English.txt);

我遇到的问题是,如果我使用我创建的fgetsValues函数,每行的第一个字符将变为NULL。这是由.csv文件类型引起的还是我只是做错了什么?

这两个函数并不完全相同,因为我读到使用FOR而不是FOREACH通过数组更快/使用更少的内存但除此之外它们几乎相同。

substr函数用于截断每一行的最后一位文本。一个单词的例子是:“Hello / 5”。第一部分是单词,而/用作分隔符以显示字符数量。

最后我使用array_unique删除任何重复的单词

function fgetValues($chars){
    $multilines = array();
    $c = count($chars);
    for ($i=0; $i<$c; $i++){
        $actualloc = 'data/'.$chars[$i].'';
        $file = fopen($actualloc, 'r');
        while(($line = fgets($file)) !== FALSE ) {
            $line[0] = trim(substr($line[0], 0, strpos($line[0], "/")));
            array_push($multilines, $line);
        }
        fclose($file);
    }
    $multilines = array_unique($multilines,SORT_REGULAR);
    return $multilines;  
}

function fgetcsvValues($chars){
    $resultlines = array();
    foreach($chars as $single){
        $actualloc = 'data/'.$single.'';
        $file = fopen($actualloc, 'r');
        while(($line = fgetcsv($file)) !== FALSE) {
            $line[0] = substr($line[0], 0, strpos($line[0], "/"));
            array_push($resultlines, $line);
        }
        fclose($file);
    }
    $resultlines = array_unique($resultlines,SORT_REGULAR);
    return $resultlines;  
}

是什么导致第一个字符变为NULL值?我怎样才能更快或更好地改进任何一个函数来读取文本文件?

0 个答案:

没有答案