2014-01-05 2 views
-1

Возможно ли генерировать случайное число, основанное на условии?Создать случайный номер на основе условия?

Я бы хотел (а) создать случайное число, 1-1000. Тем не менее, я не хочу того же случайное значение для создания любого количества, которое уже присутствует в моих переменных

<?php 
    $low= 0; 
    $height= 1000; 
    $num_1 =1; 
    $num_2 =3; 
    $num_3 =4; 
    $num_4 =6; 
    $num_5 =2; 

    $num = rand($low, $height) & != ($num_1 - $num_5) ; 
?> 
+1

Am не понимая логики здесь –

+0

, что это ваше ожидание именно? –

+0

Используйте массив для хранения «черного списка» чисел, а затем проверьте, находится ли ваше новое случайное число в этом списке. Он не будет включать 'num1 - num5'; это ** вычитание **, а не как указать диапазон значений в PHP. – meagar

ответ

1
$low= 0; 
$height= 1000; 
$numbers = array(1, 3, 4, 6, 2); 

$num = rand($low, $height); 

while (in_array($num, $numbers)) { 
    $num = rand($low, $height); 
} 

Я предполагаю, что добавление вашего «недопустимые» значения для массива будут более эффективными?

0

Медведь с этим долго условно:

$num = rand($low, $height); 
while($num == $num_1 || $num == $num_2 || $num == $num_3 || $num == $num_4 || $num == $num_5){ 
    $num = rand($low, $height); 
} 
1

Из чего я понимаю, я думаю, что вы подразумеваете, что вам нужны UNIQUE случайные числа для переменных.

Хотя для вашего случая с пятью номерами вы можете использовать решение, указанное выше, но решение не гарантирует бесперебойной работы (что, если функция rand должна была вернуть такое же число на неопределенный срок, хотя практически наименее возможно для больших чисел).

АЛГОРИТМ:

low = 0 
height = 1000 

val = array(1,2,3,4,5,....1000)// better not to waste cycles generating them 

i=0 

while(i<5) 
{ 
t = rand(low , height); 
num[i] = val[t]; 
val[t] = val[height]; 
i++; 
height--; 
} 
+0

Люблю этот алгоритм - украденный для будущего использования - заметил, что массив не начинался с 0, может вызвать ошибку из-за индекса 0 массива, поэтому сделал быструю настройку - ОП, если это то, что вы хотели, это замечательный ответ - если это нет Не добавляйте его в свой кодовый банк, если вам это нужно в будущем +1! –

Смежные вопросы