Глюк рандомайзера
то есть что-то типа такой
function n_rnd_vals($min,$max)
{
$values=array();
srand((double)microtime()*1000000);
$result=rand($min,$max);
if(!in_array($result, $values)) // или наоборот
{
array_push($values,$result);
return $result;
} else
{
array_push($values,$result);
n_rnd_values($min,$max);
}
}
и эту фнкцию повторяю в цикле 6 скажем раз.. ну чтобы было 6 неповторяющихся перемнных.
Так вот в чем трабл. То ли рекурсия не срабатывает, толи еще что, но от случаю к случаю генерится пустая переменная.. ну то есть если писать echo n_rnd_values(1,10); выдает пустую строчку.. в чем может быть трабл ? и как в этом случае нужно обхявлять переменную, что она на уничтожалась.. (я думаю что что-то в обявлении массива не то..)
Код:
$RND=Array();
srand((double)microtime()*1000000);
for ($i=0;$i<$N;$i++) {
do {
$result=rand($min,$max);
} while (($RND[$result]==1);
$RND[$result]=1;
}
srand((double)microtime()*1000000);
for ($i=0;$i<$N;$i++) {
do {
$result=rand($min,$max);
} while (($RND[$result]==1);
$RND[$result]=1;
}
Хотел сделать с рекурсией, но получилось без :)
В примере случайные числа хранятся не как значения в массиве, а как ключи. Получить список ключей можно так:
Код:
while (list ($key, $val) = each ($RND)) {
echo $key."
";
}
echo $key."
";
}
И еще, если случайных значение больше чем $max-$min, то произойдет закцикливание.
$num{int(rand($max))}++ while keys %num < $need;
@num = keys %num;
Ну чтобы в функции можно было в него просто писать..
Что-то у меня через global не выходит..
Код:
$RND=Array();
function some_funtion() {
GLOBAL $RND;
print $RND[0];
}
$RND[0]="aaaaaa";
some_function();
function some_funtion() {
GLOBAL $RND;
print $RND[0];
}
$RND[0]="aaaaaa";
some_function();
THNX ;-)