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

12
N
На сайте с 11.08.2004
Offline
176
5512

Подскажите! Как сделать pandom от 1 до 100 с исключением заданных значений.

К примеру:

$a="5";

$b="11";

echo rand(1,100);

Надо что-бы отображалось любое число от 1 до 100 но отличное от значений переменных $a и $b

bondarev.pp.ru
На сайте с 29.09.2005
Offline
202
#1

Самый простой способ - генерить число повторно, пока оно не устроит.

function smartrand($min, $max, $exceptions) {
if ($max - $min > count($exceptions)) {
do {
$value = rand($min, $max);
} while (array_search($value, $exceptions) !== false);
} else {
return false;
}
}

Третий параметр - массив исключений. В вашем случае array(5, 11)

bondarevpipes.com (http://ru.bondarevpipes.com/)
Vitо
На сайте с 17.07.2007
Offline
25
#2

Можно попроще, так например:

$a ="5";

$b ="11";

while ($rand != $a && $rand != $b) $rand = rand(1, 100);
Онлайн школа покера (http://www.pokermoscow.ru/school/)
bondarev.pp.ru
На сайте с 29.09.2005
Offline
202
#3
Vitо:
Можно попроще

Не универсально :)

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

Только, предложенную функцию smartrand нужно аккуратненько использовать. Не помешало бы дополнительных проверок для входных параметров добавить, чтобы уж действительно универсально получилось.

Выбирайте качественный хостинг (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
#5

Версия bondarev.pp.ru, почему то не работает!

А версия Vitо, отображает числа 5 и 11

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

Правильнее...


$a ="5";
$b ="11";

while ($rand == $a || $rand == $b) $rand = rand(1, 100);

Только смотрите, чтобы зацикливания не произошло... Следите за входными параметрами.

N
На сайте с 11.08.2004
Offline
176
#7
DyaDya:
Правильнее...

$a ="5";
$b ="11";

while ($rand == $a || $rand == $b) $rand = rand(1, 100);



Только смотрите, чтобы зацикливания не произошло... Следите за входными параметрами.

Так тоже пробовал, не отображается ничего! Можно поподробнее на примере как отследить параметры?

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

Ну так нужно еще и вывести значение... Я уж думал, вы догадаетесь)

Добавьте в конце...

echo $rand;
N
На сайте с 11.08.2004
Offline
176
#9
DyaDya:
Ну так нужно еще и вывести значение... Я уж думал, вы догадаетесь)
Добавьте в конце...
echo $rand;

Естественно я добавил :)

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

Да уж, логические ошибки очень легко появляются...

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


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

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

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