Как считать с файла .txt рандомную строку PHP

203
03 сентября 2018, 05:10

Есть словарь с множеством слов, каждое новое слово начинается с новой строки. Как можно занести в переменную $words рандомное слово.

Answer 1

Если файл огромный, чтоб ни читать его весь, не разбивать на строки, не считать количество строк, не выбирать случайную из них. Можно выстрелить приблизительно по строке =)

//Имя файла
$FILENAME = "/home/user/text.txt";
//Разделитель строк в файле
$LINE_DELIMITER = "\n";
//Максимальная разумная длина одной строки
$MAX_LINE_LEN = 255 + strlen($LINE_DELIMITER);
//Берем немного с запасом
$TRIPLE_BUFFER = $MAX_LINE_LEN * 3;
//Длина файла
$fileLen = filesize($FILENAME);
//На всякий случай проверим длину файла
if (empty($fileLen) || $fileLen < $TRIPLE_BUFFER) {
   throw new \ErrorException("Файл слишком мал");
}    
//Случайная позиция для чтения
$rnd = rand(0, $fileLen - $TRIPLE_BUFFER);
//Открываем файл для чтения
$handle = fopen($FILENAME, "r");
//Устанавливаем указатель в случайном месте файла
fseek($handle, $rnd);
//Читаем начиная со случайной позиции
$stream = fread($handle, $TRIPLE_BUFFER);
//Разбиваем текст на строки
$lines = explode($LINE_DELIMITER, $stream);
//Считаем количество прочитанных строк
$lineCount = count($lines);
//Инициализируем нашу случайную строку
$randomLine = "";
//Пропускаем первую строку, так как она может быть обрезана
$startAtLine = ($rnd !== 0) ? 1 : 0;
//Ищем случайную строку
for ($i = $startAtLine; $i < $lineCount; $i++) {
    //Пропускаем пустые строки
    if (!empty($lines[$i])) {  
        //Ну и наконец, вот наша случайная строка
        $randomLine = $lines[$i];
        break;    
    }
}
READ ALSO
проблема с парсингом номера телефона на сайте avito

проблема с парсингом номера телефона на сайте avito

Делаю парсер объявлений с avitoВозникла проблема парсинга номера телефона

198
Как перемешать строки в текстовом файле

Как перемешать строки в текстовом файле

Есть slovartxt с множеством слов, каждое начинается с новой строки:

175
удаление нескольких записей по checkbox PHP

удаление нескольких записей по checkbox PHP

извините пожалуйста за детский вопрос, необходимо сделать удаление записей по checkbox, что то не получаетсягде ошибка? Подскажите пожалуйста

171