Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глюк рандомайзера

2.1K
17 декабря 2003 года
lootelen
44 / / 27.11.2003
Вобщем есть такая функция, которая по идее должна генерить N уникалных неповторяющихся рандомных чисел. Проверка идет по наличию в массиве записанных ранее сгенеренных уникальных чисел.

то есть что-то типа такой

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); выдает пустую строчку.. в чем может быть трабл ? и как в этом случае нужно обхявлять переменную, что она на уничтожалась.. (я думаю что что-то в обявлении массива не то..)
4
17 декабря 2003 года
mike
3.7K / / 01.10.2002
Так ты каждый раз при входе в функцию чистишь массив.

 
Код:
$RND=Array();
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."
"
;
  }


И еще, если случайных значение больше чем $max-$min, то произойдет закцикливание.
1.8K
17 декабря 2003 года
2NetFly
132 / / 01.09.2003
В PHP можно уложиться в один цикл. Но на Перле выглядит красивее ;=)
$num{int(rand($max))}++ while keys %num < $need;
@num = keys %num;
2.1K
18 декабря 2003 года
lootelen
44 / / 27.11.2003
а подскажите как объявить глобальный массив..
Ну чтобы в функции можно было в него просто писать..

Что-то у меня через global не выходит..
4
18 декабря 2003 года
mike
3.7K / / 01.10.2002
просто:

 
Код:
$RND=Array();

function some_funtion() {
  GLOBAL $RND;

  print $RND[0];
  }

$RND[0]="aaaaaa";
some_function();
2.1K
18 декабря 2003 года
lootelen
44 / / 27.11.2003
THNX ;-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог