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

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

Решение
Вызовите функцию 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, без необходимости запоминать все строки в памяти.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Блокировка файла
Запись в несколько файловых дескрипторов одновременно
Запись в стандартный поток вывода
Непосредственная модификация файла без временной копии
Обработка каждого слова в файле

Вернуться в раздел: PHP / 18. Файлы