Как вывести 30 случайных строк из тектового файла без нагрузки для сервера?
Файл txt - текстовой файл из 10тыс строк русскоязычного текста. Как вывести 30 случайных строк из этого файла без перемешивания? Код ниже выполнял эту функцию, каждый раз перемешивая файл, что затрудняло процесс и страница грузилась долго, учитывая несколько мест ввода скрипта на странице. Текст кириллица.
Формат вывода: случайная строка случайная строка ... случайная строка (всего 30)
Код, который использовался ранее (не подходит из-за длительности обращений к серверу):
<?php
$arr = file('https://site/1.txt');
shuffle($arr);
$res = array_slice($arr, 0, 30);
foreach ($res as $str) {
$get = mb_detect_encoding($str, array('utf-8', 'cp1251'));
echo iconv($get, 'UTF-8', $str);
}
?>
или так:
foreach($res as $str){
echo htmlspecialchars($str);
}
?>
Очень прошу предложить полный код решения, я сам SEOшник и в ПХП не силен. Заранее спасибо.
Ответы (1 шт):
По сути проблемы вам подойдёт алгоритм Reservoir sampling
*
S has items to sample, R will contain the result
*/
ReservoirSample(S[1..n], R[1..k])
// fill the reservoir array
for i = 1 to k
R[i] := S[i]
// replace elements with gradually decreasing probability
for i = k+1 to n
j := random(1, i) // important: inclusive range
if j <= k
R[j] := S[i]
Однако не могу сказать, подойдёт ли это вам, т.к. если файл изменяется, то весь файл всё равно читать нужно.