Разница между 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? И как я могу улучшить любую из функций, чтобы читать текстовые файлы быстрее или лучше?

0 ответов

Другие вопросы по тегам