2014-02-13 5 views
0

Я хочу создать массив со случайными числами. Я не хочу, чтобы одно и то же значение отображалось дважды в массиве. Я хочу, чтобы все пять значений были уникальными. Как мне это сделать?Генерировать массив с уникальными случайными числами

$rand1 = rand(1, 50); 
$rand2 = rand(1, 50); 
$rand3 = rand(1, 50); 
$rand4 = rand(1, 50); 
$rand5 = rand(1, 50); 

$input = array($rand1,$rand2,$rand3,$rand4,$rand5); 
print_r($input); 

ответ

0
$total = 10; // total random numbers to create 

$randoms = array(); 

for($i=0;$i<=$total;$i++) 
{ 
    $randomNumber = rand(1,50); 
    while(in_array($randomNumber,$randoms)) { 
    $randomNumber = rand(1,50); 
    } 
    $randoms[] = $randomNumber; 
} 

var_dump($randoms); 
0
$x=0; 
$rand=array(); 
while ($x<5) { 
    $r=rand(1, 50); 
    if(in_array($r, $rand)){ 

    }else{ 
    $rand[] = $r; 
    $x++; 
    } 



} 
var_dump($rand); 
+1

это не всегда работает, так как инструкция else выполняется только один раз. поэтому если инструкция else генерирует одинаковое число, вы все равно застреваете с дубликатами. – skrilled

+1

@skrilled Спасибо, что указали, что я редактировал код. – Chris

0

Попробуйте это:

$a = array(); 
for($i=0;$i<5;$i++){ 
$rand1=rand(1, 5); 
    while(in_array($rand1,$a)){ 
    $rand1=rand(1, 5); 
    } 
    $a[$i] = $rand1; 

} 
print_r($a); 

Демо: https://eval.in/101433

демо ВЫВОД:

Array 
(
    [0] => 2 
    [1] => 1 
    [2] => 4 
    [3] => 5 
    [4] => 3 
) 
+0

@gordon falvey: он явно протестирован. –

-1

У меня есть эта идея ... должны быть лучшие идеи, но я думаю, что это одно:

$rand1 = rand(1, 50); 
do{ 
    $rand2 = rand(1, 50); 
}while($rand2==$rand1); 

do{ 
    $rand3 = rand(1, 50); 
}while($rand3==$rand2 || $rand3==$rand1); 


do{ 
    $rand4 = rand(1, 50); 
}while($rand4==$rand3 || $rand4==$rand2 || $rand4==$rand1); 

do{ 
    $rand5 = rand(1, 50); 
}while($rand5==$rand4 || $rand5==$rand3 || $rand5==$rand2 || $rand5==$rand1); 

$input = array($rand1,$rand2,$rand3,$rand4,$rand5); print_r($input); 
Смежные вопросы