У меня есть n csv-файлов, которые мне нужно сравнить друг с другом и впоследствии изменить.Проблема в том, что каждый CSV-файл содержит около 800 000 строк.
Для чтения CSV-файла я использую fgetcsv , и он работает хорошо.Получить немного памяти, но в конце концов это достаточно быстро.Но если я пытаюсь сравнить массив друг с другом, это займет годы.
Еще одна проблема заключается в том, что мне нужно использовать foreach для получения данных csv с помощью fgetcsv из-за количества файлов n.Я получаю один ультра большой массив и не могу сравнить его с array_diff.Поэтому мне нужно сравнить его с вложенными циклами foreach, которые занимают целую вечность.
фрагмент кода для лучшего понимания:
foreach( $files as $value ) {
$data[] = $csv->read( $value['path'] );
}
мой класс csv использует fgetcsv для добавления вывода в массив:
fgetcsv( $this->_fh, $this->_lengthToRead, $this->_delimiter, $this->_enclosure )
Все данные всех CSV-файлов хранятся в массиве $ data.Вероятно, это первая большая ошибка, связанная с использованием только одного массива, но я понятия не имею, как сохранять гибкость при работе с файлами без использования foreach.Я пытался использовать гибкие имена переменных, но я тоже там застрял:)
Теперь у меня есть этот большой массив.Обычно, если я пытаюсь сравнить значения друг с другом и выяснить, существуют ли данные из первого файла во втором файле и т. Д., Я использую array_diff или array_intersect.Но в этом случае у меня есть только один большой массив.И, как я сказал, для запуска foreach требуется несколько веков.
Кроме того, после всего 3 файлов у меня есть массив с 3 * 800.000 записей.Я думаю, что после 10 файлов моя память взорвется.
Так есть ли лучший способ использовать PHP для сравнения n очень больших файлов CSV?