我正在阅读文本文件,试图以最快的方式读取文件并逐行将它们放入数组中。
我使用的一些文件是.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值?我怎样才能更快或更好地改进任何一个函数来读取文本文件?