2014-12-11 3 views
0

У меня есть 1 файл txt со 100 000 строк. Можете ли вы узнать, как можно получить 1 строку быстрее всего? Большое спасибо !PHP: Как получить случайную строку в большом файле быстрее всего?

+0

Почему вы не сравниваете некоторые идеи, которые у вас есть. '$ line = file ($ filename) [rand (0,100000)];' может быть одним проверьте, запускаете ли вы –

+1

. Вам нужно будет зациклиться, чтобы найти количество строк. См. Этот ответ http://stackoverflow.com/a/20537130/1281385 – exussum

+0

Предложение DannyHearnah будет быстрее, но используйте больше памяти. exussums будут использовать почти без памяти, но будут медленнее. – Flosculus

ответ

1

Самый быстрый способ - создать индекс (простой массив, содержащий позицию в файле каждой новой строки). Затем выберите случайный ключ, получите позицию, fseek файл в эту позицию и прочитайте строку. Это потребует обновления индексного файла в любое время, когда вы измените файл, но если вы хотите оптимизировать извлечение данных, так оно и есть.

Вы можете оптимизировать дальнейшую работу путем разделения файла на диапазоны (например, наложения данных) или с несколькими представлениями файла (например, вы можете иметь файл с перевернутыми линиями, чтобы последний был первым, а если ваше случайное число больше чем половина элементов, вы читаете из второго файла)

Смежные вопросы