php функция rand() с исключением значений

12
N
На сайте с 11.08.2004
Offline
176
#11

В общем попробую сформулировать по другом!

Нужно сгенерировать для переменных значения от 1 до 100 что бы значения переменных не пересекались, то есть результат должне быть примерно такой:

$a="7";

$b="14";

$d="2";

... и таких 30 переменных, важно что-бы значения у них не совпадали друг с другом

Nickk добавил 26.03.2008 в 23:11

DyaDya:
Да уж, логические ошибки очень легко появляются...
Вот, уже проверенный простой код. Неуниверсальный, но конкретно по вашему случаю.


<?
$a =5;
$b =11;

$rand = rand(1, 100);
while ($rand == $a || $rand == $b){
$rand = srand(1, 100);
}
echo $rand;
?>

Работает но периодически проскакивает:

Warning: srand() expects at most 1 parameter, 2 given in /home/.../www/test.php on line 39

DyaDya
На сайте с 11.04.2007
Offline
147
#12

может этот код более правильный...


<?
$arr=array();
$n=30;

function getNextRand($arr){
$rand = rand(1, 100);
while (in_array($rand, $arr)){
$rand = rand(1, 100);
}
return $rand;
}

for ($i=1; $i<=$n; $i++){
$arr[]=getNextRand($arr);
}

print_r($arr);
?>

в $arr как раз окажутся 30 элементов.

Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
N
На сайте с 11.08.2004
Offline
176
#13
DyaDya:
может этот код более правильный...


<?
$arr=array();
$n=30;

function getNextRand($arr){
$rand = rand(1, 100);
while (in_array($rand, $arr)){
$rand = rand(1, 100);
}
return $rand;
}

for ($i=1; $i<=$n; $i++){
$arr[]=getNextRand($arr);
}

print_r($arr);
?>


в $arr как раз окажутся 30 элементов.

Благодарю! Работает!

Shtogrin
На сайте с 02.11.2006
Offline
95
#14

Массив $rand будет содержать 30 случайных чисел от 1 до 100. Если диапазон не большой (1-100), то этот способ будет быстрее раз в 10.


<?php
// создаем массив из 100 чисел от 1 до 100
$rand=range(1,100);
// перемешиваем элементы
shuffle($rand);
// отрезаем нужный кусок
$rand=array_slice($rand,1,30);
?>
www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
12

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