Выбор случайной строки из файла

Задача
Необходимо выбрать из файла случайную строку, например показать выборку из файла афоризмов.

Решение
Вызовите функцию pc_randomint(), показанную в примере 18.3, которая распределяет возможность выбора равномерно по всем строкам файла.

Пример 18.3. pc_randomint()
function pc_randomint($max = 1) {
$m = 1000000;
return ((mt_rand(1,$m * $max)-1)/$m);
}


Приведем пример применения функции pc_randomint():

$line_number = 0;
$fh = fopen('sayings.txt','r') or die($php_errormsg);
while (! feof($fh)) {
if ($s = fgets($fh,1048576)) {
$line_number++;
if (pc_randomint($line_number) < 1) {
$line = $s;
}
}
}
fclose($fh) or die($php_errormsg);


Обсуждение
Функция pc_randomint() вычисляет случайное десятичное число между 0 и $max, включая 0, но исключая $max. После чтения каждой строки счетчик строк увеличивается, а функция pc_randomint() генерирует случайное число между 0 и $line_number. Если число меньше 1, то в качестве случайной строки выбирается текущая строка. После того как прочитаны все строки, последняя выбранная случайная строка остается в переменной $line.

Этот алгоритм практически обеспечивает вероятность выбора каждой строки файла из n строк, равную 1/n, без необходимости запоминать все строки в памяти.
Теги:
Выбор случайной строки
Добавлено: 22 Июля 2018 15:57:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...