Как эхо-случайная строка из текстового файла

Формат моего текстового файла:

Это первая строка.
Это вторая строка.
Это третья строка.

В текстовом файле может быть больше строк. Как эхо одной случайной строки на каждом обновлении из текстового файла с помощью php. Все комментарии оценены. благодаря

В целом хороший подход к такой ситуации заключается в следующем:

  1. Прочитайте строки в массиве с помощью file()
  2. 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:

  • P (1) = 1
  • P (2) = 1/2 * P(1)
  • P (3) = 2/3 * P(2)
  • P (N) = (N-1)/N * P(N-1) = 1/N

Это, в конечном счете, даст нам равномерно распределенную случайную строку из файла любого размера, фактически не прочитав весь файл в памяти.

Надеюсь, это поможет.