Php fgetcsv和fgets&;速度差

Php fgetcsv和fgets&;速度差,php,fgets,fgetcsv,Php,Fgets,Fgetcsv,我在玩弄阅读文本文件,试图以最快的方式阅读文件,并将它们逐行放入数组中 我使用的一些文件是.csv文件,还有一些是.txt文件。当我开始时,我发现了一个读取csv文件的示例,所以我开始使用它,但我很快发现fgets的速度要快得多。FGETCSV值是我创建的第一个值,FGETS值是第二个/更快的值 我通过第一个参数$chars作为数组输入文件。例如,这是我使用的一个数组 $dictionaryfiles = array( 'dictionaries/Dutch.csv' ,'dic

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

我使用的一些文件是.csv文件,还有一些是.txt文件。当我开始时,我发现了一个读取csv文件的示例,所以我开始使用它,但我很快发现fgets的速度要快得多。FGETCSV值是我创建的第一个值,FGETS值是第二个/更快的值

我通过第一个参数$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;  
}
函数fgetValues($chars){
$multilines=array();
$c=计数($chars);

对于($i=0;$iAn)而言,通常更快的方法是
数组映射(“str_getcsv”,file(“fn.csv”)
——它一次读取文件,但会在每个PHP核心循环中拆分csv列。(但可能需要后期处理空行/列等。)