Скрипт для выбора 8ми рандомных строк без повторений

Damasc

Участник
Регистрация
5 Мар 2009
Сообщения
174
Реакции
6
Очень нужна ваша помощь.

Пишу небольшой модуль, нужно чтобы он выводил из .txt файла 8 рандомных строк, но не делал повторений.

Написал скрипт который выводит 1 строку:
PHP:
<?php
if(!defined('DATALIFEENGINE'))
{
die("Hacking attempt!");
}
$rndlines_file = '/rndlines.txt';
$rndlines_lines = file($rndlines_file);
$rndlines = $rndlines_lines[rand(0, count($rndlines_lines) - 1)];
echo $rndlines;
?>

Как сделать чтобы скрипт выводил 8 строк и исключал повторения при выборе? Я так понимаю тут делается массивом, но моих знаний пока не достаточно.
 
PHP:
<?php
# Получаем строки. file() не ок, да и мой метод быстрее
$fd = fopen('/rndlines.txt', 'rt');
$lines = explode("\n", fread($fd, filesize('/rndlines.txt')));
$count = count($lines);
# Проверяем кол-во строк
if ($count < 8) { /* тут можно эксепшн бросить */ }
# Строки, которые мы уже выбрали
$hitted = array();
# Запускаем цикл
while (count($hitted) < 8) {
    $random = rand(0, $count - 1);
    if (empty($hitted[$random])) {
        $hitted[$random] = $lines[$random];
    }
}

$hitted - массив с 8 строками. делай с ним, что хочешь
 
Если я верно понимаю, код должен работать превосходно и так:
PHP:
<?php
# Получаем строки. file() не ок, да и мой метод быстрее
$fd = fopen('http://test1.ru/rndlines.txt', 'rt');
$lines = explode("\n", fread($fd, filesize('http://test1.ru/rndlines.txt')));
$count = count($lines);
# Проверяем кол-во строк
if ($count < 8) {  }
# Строки, которые мы уже выбрали
$hitted = array();
# Запускаем цикл
while (count($hitted) < 8) {
    $random = rand(0, $count - 1);
    if (empty($hitted[$random])) {
        $hitted[$random] = $lines[$random];
    }
} 
echo $hitted;
?>
_http://test1.ru - локал хост денвера.
ошибка:
Код:
Warning: filesize() [function.filesize]: stat failed for http://test1.ru/rndlines.txt in Z:\home\test1.ru\www\1.php on line 4
Warning: fread() [function.fread]: Length parameter must be greater than 0 in Z:\home\test1.ru\www\1.php on line 4
Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\test1.ru\www\1.php on line 12
 
Пишу небольшой модуль, нужно чтобы он выводил из .txt файла 8 рандомных строк, но не делал повторений.
PHP:
<?php
$rndlines_lines = file('rndlines.txt');
shuffle ($rndlines_lines); //shuffle -- Перемешивает массив
for($i=0;;$i++) {if ($i==8){break;} else {echo $rndlines_lines[$i].'<br>';}}
?>
 
PHP:
<?php
$rndlines_lines = file('rndlines.txt');
shuffle ($rndlines_lines); //shuffle -- Перемешивает массив
for($i=0;;$i++) {if ($i==8){break;} else {echo $rndlines_lines[$i].'<br>';}}
?>

Идеально работает, спасибо большое! буду дальше изучать PHP

Буду благодарен если подскажете как результат выполнения скрипта вывести в табличку

4 по ширине, 2 по высоте.

Тут я тоже не совсем понимаю как это сделать. В одну линию всё понятно, а вот как быть со 2м рядом в таблице?
 
Буду благодарен если подскажете как результат выполнения скрипта вывести в табличку
4 по ширине, 2 по высоте.
Тут я тоже не совсем понимаю как это сделать. В одну линию всё понятно, а вот как быть со 2м рядом в таблице?
PHP:
<table border ="1"><tr>
<?php
$rndlines_lines = file('rndlines.txt');
shuffle ($rndlines_lines); //shuffle -- Перемешивает массив
for($i=0;;$i++) 
{
	if ($i==8){break;} else 
	{
		echo '<td>'.$rndlines_lines[$i].'</td>'; if ($i==3) echo '</tr>';
	}
}
?>
</table>
 
PHP:
<?php
$rndlines_lines = file('rndlines.txt');
shuffle ($rndlines_lines); //shuffle -- Перемешивает массив
echo '<table border ="1"><tr>';
for($i=0;$i<8;$i++) 
{
   echo '<td>'.$rndlines_lines[$i].'</td>';
   if ($i==3) echo '</tr><tr>';
}
echo '</tr></table>';
?>
 
Назад
Сверху