Вопрос по PHP rand()?

12
seosniks
На сайте с 13.08.2007
Offline
389
1538

Скажите пожалуйста как мне сделать лучше.

Пример

$trs = array("строка 1","строка2","строка три и.тд.);

$rand= rand(0,2);
echo $trs[$rand];

так вот иногда выскакивает пустая строка.

Можно ли как сделать чтобы пустых строк небыло.

Этот код указан чисто как пример.

Щас нашел такой вариант,хочу попробовать.

$temp=array(); 


$temp=file('base.txt');
$size_temp=sizeof($temp);

// Здесь вывод случайной строки из base.txt
echo $temp[mt_rand(0,$size_temp-1)];
Shoo[rik]
На сайте с 12.04.2008
Offline
66
#1
seosniks:
так вот иногда выскакивает пустая строка.
Можно ли как сделать чтобы пустых строк небыло.

Я могу ошибаться, но вот мой вариант Вашего примера:


$trs = array("строка 1","строка 2","строка 3");
$count = count($trs); // получаем в $count кол-во элементов массива
$rand= rand(0,$count-1); // массив начинается с ноля, а count() считает с 1, значит убираем 1н лишний
echo $trs[$rand];
[umka]
На сайте с 25.05.2008
Offline
456
#2

Думаю, что в первую очередь нужно убедиться, что в файле нет пустых строк.

Приведите код целиком, вместе с файлами.

Лог в помощь!
Shoo[rik]
На сайте с 12.04.2008
Offline
66
#3
[umka:
]Думаю, что в первую очередь нужно убедиться, что в файле нет пустых строк.

Есть предположение, что в рандом захватывался не существующий элемент массива, т.е. который после последнего. Если сравнить первый и второй варианты, в первом нету счетчика, во втором есть. (Мысли в слух, так сказать)

seosniks
На сайте с 13.08.2007
Offline
389
#4
'[umka:
;7753248']Думаю, что в первую очередь нужно убедиться, что в файле нет пустых строк.
Приведите код целиком, вместе с файлами.

Вот весь код. Это пример.

$temp=array();

$temp=file('ya.txt');
$size_temp=sizeof($temp);
$l=$temp[mt_rand(0,$size_temp-1)];
[umka]
На сайте с 25.05.2008
Offline
456
#5

файлик 'ya.txt' забыли прикрепить :)

seosniks
На сайте с 13.08.2007
Offline
389
#6
'Shoo[rik:
;7753324']Есть предположение, что в рандом захватывался не существующий элемент массива, т.е. который после последнего. Если сравнить первый и второй варианты, в первом нету счетчика, во втором есть. (Мысли в слух, так сказать)

Я пробовал так

rand(0,100);  и так rand(1,100); 

Тоесть и с еденицы и с нуля пробовал.

код указаный вторым работает без пропуска. Тоесть так как мне и надо.

seosniks
На сайте с 13.08.2007
Offline
389
#7
'[umka:
;7753690']файлик 'ya.txt' забыли прикрепить :)

В файле обычные слова, каждое слово с новой строки. Пустой строки нет.

txt ya.txt
pikasso
На сайте с 27.01.2008
Offline
150
#8

seosniks, пользуйтесь функцией array_rand.

[umka]
На сайте с 25.05.2008
Offline
456
#9

запустил ваш скриптик с вашим файлом в цикле 1000 раз — ни одного пропуска.

что я делаю не так? :)

dvaes
На сайте с 03.09.2007
Offline
65
#10

seosniks, а в первом варианте число строк сами от балды брали? без выяснения сколько строк в файле?)

12

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