База данных - текстовый файл

Статус
В этой теме нельзя размещать новые ответы.
<?
$desc = file("Z.txt");
// $i<6 тут сколько слов выводить
for ($i=0; $i<6; $i++) {
do {
$nrand=rand(0,(count($desc)-1));
} while(isset($arr2[$nrand]));
$arr2[$nrand]=1;
$risk="<a href='http://site.com/".trim($desc[$nrand])."/'>".trim($desc[$nrand])."</a>, "; // Вывод с линками
//$risk="".trim($desc[$nrand]).", "; //вывод просто слов

echo "$risk";
}


?>
 
  • Нравится
Реакции: farm
Для файла любого размера:

PHP:
$file = 'mytextfile.txt';

$size = filesize($file);
$fp = fopen($file, 'r');
fseek($fp, rand(0,$size));
fgets($fp);
$line = fgets($fp);

Алгоритм - переходим на случайное место в файле (скорее всего это будет где-то в середине строки), читаем остаток до конца строки, читаем следующую строку.
 
Для файла любого размера:

PHP:
$file = 'mytextfile.txt';

$size = filesize($file);
$fp = fopen($file, 'r');
fseek($fp, rand(0,$size));
fgets($fp);
$line = fgets($fp);

Алгоритм - переходим на случайное место в файле (скорее всего это будет где-то в середине строки), читаем остаток до конца строки, читаем следующую строку.

Как идея - хорошо и понятно. Но:


2. Как вариант -


3. Ещё вариант - преобразовать строки текстового фала в записи таблицы tbl и вытаскивать случайную строку уже оттуда (в примере вытаскивается одна строка, если нужно больше, после LiMIT ставим число, сколько нужно строк:(
 
Ну да, я почему-то решил, что раз речь о больших файлах, то вероятность попасть в последнюю строку крайне мала. Но лучше это учесть:

PHP:
$file = 'mytextfile.txt';
$size = filesize($file);
$fp = fopen($file, 'r');
fseek($fp, rand(0,$size));
fgets($fp);
if(feof($fp)) fseek($fp,0); // <--
$line = fgets($fp);

Ну или даже так:
PHP:
$file = 'mytextfile.txt';
$size = filesize($file);
$fp = fopen($file, 'r');
do {
  fseek($fp, rand(0,$size));
  fgets($fp);
  $line = fgets($fp);
} while (!$line);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху