Как сделать посредством php выборку рандомную из txt файлов

[Удален]
1664

Как настроить(посредством php) рандомную выборку какой-то строки из определенного txt файла и вывести ее на странице? К примеру ключи в файле и их нужно выводить на страницах рандомно, чтобы не повторялось?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

$lines = file('file.txt');

$cnt = count($lines);

$rand = rand(0, ($cnt-1));

echo trim($lines[$rand]); // выводит случайную строку

Что значит чтобы не повторялись?

На главной - ключ1

на "контакты" - ключ10

на "галерея" - ключ 100500

или как?

Подпись))
[Удален]
#2
Милованов Ю.С:
$lines = file('file.txt');
$cnt = count($lines);
$rand = rand(0, ($cnt-1));
echo trim($lines[$rand]); // выводит случайную строку

Что значит чтобы не повторялись?
На главной - ключ1
на "контакты" - ключ10
на "галерея" - ключ 100500
или как?

Значит примерно это, да. То есть, если десять ключей и десять страниц, то не должно быть страниц с тем же ключём, что и на какой-то странице.

А можете по объяснить просто, что все эти строки значат?

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#3

$lines = file('file.txt'); - читаем файл в индексный массив. Каждая строка - ячейка массива

$cnt = count($lines); - считаем количество полученных ячеек

$rand = rand(0, ($cnt-1)); - Нумерация массива начинается с 0, и поэтому максимальное число мы делаем на 1 меньше, чем количество строк. Функция возвращает случайное число из указанного диапазона

echo trim($lines[$rand]); - выводит случайную строку

А эта неповторяемость в пределах чего должна быть?

Можно например на каждой странице выведенный результат писать в сессию, и при каждом выводе смотреть, выводили ли мы для юзера такую строку.

Это если в пределах 1 сессии. То есть юзер на сайт зашел, погулял по страницам, ушел. Завтра пришел, и ему опять может вывестись то, что уже было показано.

Вариант с сессиями.


<?php
session_start(); //НА всех страницах до любого вывода.
$lines = file('file.txt');
$cnt = count($lines);
if (!isset($_SESSION['lines']))
{
$_SESSION['lines'] = array();
}
$i = 1;
do
{
if ($i > $cnt)//Если мы прокрутили цикл $cnt(количество строк) раз, то выходим, так как может быть банальное зацикливание, если юзеру уже показаны все строки.
{
$stop = 1;
break;
}
$rand = rand(0, ($cnt-1));
$line = trim($lines[$rand]);
$i++;
}
while (in_array($line, $_SESSION['lines']));//пока полученная строка есть в массиве уже показанных значений - крутим цикл в поисках нового:)
if (!isset($stop))
{
echo $line; // выводит случайную строку
$_SESSION['lines'][] = $line;
}
?>

Метод этот не совершенен, так как может к примеру 10 раз подряд выбрать из файла ту строку, которая была показана на предыдущей страницы. А так как мы такое не показываем и у нас стоит ограничитель, то мы просто ничего не покажем юзеру.

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

Ну то есть в файл накидываем 500 строк. Ну максимум юзер сделает 100 переходов. Даже в этом случае на последнем странице вероятность попасть в уже показанную строку всего лишь 20%.

[Удален]
#4

Спасибо, надо еще продумать дело это.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий