2012-08-04 51 views
-1

以及我有一個用於蘭特(); 我需要從1到x的數量4倍,並確保該值不會返回。試圖蘭德()沒有重複

這是我的代碼corrently:

$Count = 15; 
$secondstage = ''; 
$arrayindex = ''; 
for($i=1; $i<5; $i++){ 
    $arrayindex = rand(1,$Count); 
    if($secondstage == $arrayindex){ 
     for($b=1; $arrayindex == $secondstage; $b++){ 
      $arrayindex = rand(1,$Count); 
     } 
    } 
    $secondstage = $arrayindex; 
    echo $secondstage; 
    echo '<br>'; 
} 

AM我這裏有一些邏輯錯誤?我想可能會使用,但也應該工作。

+0

上我仍然無法看到我的代碼的邏輯有什麼問題..我平平淡淡地嘗試着......同樣的事情 – 2012-08-04 00:47:07

+0

爲什麼不把數組放在數組中並使用array_unique()?或使用array_rand() – 2012-08-04 00:58:49

+0

謝謝大家我使用marc B的解決方案 – 2012-08-04 01:14:16

回答

2

所以基本上你想1和15之間的4個隨機不重複的數字,包容性?你爲此使用了太多的代碼。一個簡單的版本:

$numbers = array(); 
do { 
    $possible = rand(1,15); 
    if (!isset($numbers[$possible])) { 
     $numbers[$possible] = true; 
    } 
} while (count($numbers) < 4); 
print_r(array_keys($numbers)); 
+0

1 to x - not specific 15. – 2012-08-04 00:43:44

+1

代碼太多了:-)請查看我的版本:http://stackoverflow.com/a/11805502/1329367 – Mahn 2012-08-04 02:43:22

0

你可以這樣做(至極會給你原來陣列的隨機密鑰數組):

<?php 

$array = array(); 
$max = 100; 
$numberValuesWanted = 5; 

for($i = 0; $i < $max; $i++) 
    $array[] = $i; 

$randomKeys = array_rand($array, $numberValuesWanted); 

print_r($randomKeys); 
+0

必須是非重複的數字。 – 2012-08-04 00:38:44

+0

我想上面的可以有重複的數字隊友 – 2012-08-04 00:42:56

+0

array_rand返回重複鍵? (我不記得...) – Oussama 2012-08-04 00:43:38

1

我會把已經隨機數在數組中:

<?php 
$count = 15; 
$cArray = array(); 
for($i=1; $i<5; $i++){ 
    $rand = rand(1, $count); 
    if(in_array($rand, $cArray)){ 
     $i--; 
    } else { 
     $cArray[] = $rand; 
     echo $rand . "<br>"; 
    } 
    } 
?> 

我檢查,此代碼的工作本地服務器:)

+0

你和marc B似乎在工作 – 2012-08-04 00:53:39

+0

太棒了!然後請切換我們的答案作爲工作,所以其他人有同樣的問題可以看到它已被回答:) – 2012-08-04 01:01:12

1
$count = 15; 
$values = range(1, $count); 
shuffle($values); 
$values = array_slice($values, 0, 4);