Формат моего текстового файла:
Это первая строка.
Это вторая строка.
Это третья строка.
В текстовом файле может быть больше строк. Как эхо одной случайной строки на каждом обновлении из текстового файла с помощью php. Все комментарии оценены. благодаря
В целом хороший подход к такой ситуации заключается в следующем:
file()
echo
вне значение случайного массива using array_rand()
Ваш код может выглядеть примерно так:
$lines = file('my_file.txt'); echo $lines[array_rand($lines)];
Как большой файл мы говорим? простой подход состоит в том, чтобы загрузить весь файл в память в виде строкового массива и выбрать индекс случайного массива от 0 до N и показать эту строку ..
Если размер файла может стать действительно большим, тогда вам придется реализовать какое-то потоковое решение.
Следующее решение даст равномерно распределенную случайную линию из относительно большого файла с настраиваемым максимальным размером линии для каждого файла.
<?php function rand_line($fileName, $maxLineLength = 4096) { $handle = @fopen($fileName, "r"); if ($handle) { $random_line = null; $line = null; $count = 0; while (($line = fgets($handle, $maxLineLength)) !== false) { $count++; // P(1/$count) probability of picking current line as random line if(rand() % $count == 0) { $random_line = $line; } } if (!feof($handle)) { echo "Error: unexpected fgets() fail\n"; fclose($handle); return null; } else { fclose($handle); } return $random_line; } } // usage echo rand_line("myfile.txt"); ?>
Скажем, файл имел 10 строк, вероятность выбора строки X:
1
1/2 * P(1)
2/3 * P(2)
(N-1)/N * P(N-1)
= 1/N
Это, в конечном счете, даст нам равномерно распределенную случайную строку из файла любого размера, фактически не прочитав весь файл в памяти.
Надеюсь, это поможет.