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