Разница между fgetcsv и fgets и разница в скорости
Я возился с чтением текстовых файлов, пытаясь найти самый быстрый способ чтения файлов и построчно помещать их в массив.
Некоторые из файлов, которые я использую, являются файлами.csv, а некоторые - файлами.txt. Когда я начал, я нашел пример для чтения файлов CSV, поэтому я начал использовать его, но я быстро обнаружил, что fgets значительно быстрее. FgetcsvValues - это первое, что я создал, а fgetsValues - второе / более быстрое.
Я вводю файлы через первый параметр $chars в виде массива. Так, например, это будет массив, который я использую
$dictionaryfiles = array(
'dictionaries/Dutch.csv'
,'dictionaries/English.txt);
Проблема в том, что первый символ каждой строки превращается в NULL, если я использую созданную мной функцию fgetsValues. Это связано с типом файла.csv или я просто делаю что-то не так?
Эти две функции не совсем одинаковы, потому что я прочитал, что прохождение массива с использованием FOR вместо FOREACH происходит быстрее / использует меньше памяти, но, кроме того, они почти одинаковы.
Функция substr используется для обрезки последнего бита текста в каждой строке. Пример слова может быть таким: "Привет /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? И как я могу улучшить любую из функций, чтобы читать текстовые файлы быстрее или лучше?