2010-05-12 101 views
2

我有一個從表中調用用戶關聯用戶的函數。該函數然後使用rand();函數從數組中選擇5個隨機選擇的用戶ID然而!...Rand();排除和已經隨機生成的數字..?

在用戶不具有許多關聯用戶但超過min(如果低於5它只是返回數組的情況下),那麼它由於重複的蘭特編號給出了不好的結果...

如何克服這個問題或從下一個蘭特()中排除先前選擇的蘭特編號?函數調用。

以下是執行該工作的代碼部分。請記住,這個腳本在任何地方都可以使用,因此必須高效。

$size = sizeof($users)-1; 
    $nusers[0] = $users[rand(0,$size)]; 
    $nusers[1] = $users[rand(0,$size)]; 
    $nusers[2] = $users[rand(0,$size)]; 
    $nusers[3] = $users[rand(0,$size)]; 
    $nusers[4] = $users[rand(0,$size)]; 

    return $nusers; 

在此先感謝! 斯特凡

回答

3

最簡單的方法是使用array_rand()

$users = range(3, 10); // this is just example data 
$nusers = array_rand($users, 5); // pick 5 unique KEYS from $users 

foreach ($nusers as $key => $value) 
{ 
    $nusers[$key] = $nusers[$value]; // replace keys with actual values 
} 

echo '<pre>'; 
print_r($nusers); 
echo '</pre>'; 

PS:Read this知道爲什麼你應該使用mt_rand()而不是rand()

+0

無論出於何種原因,我無法加載該鏈接。 – Powerlord 2010-05-12 18:13:03

+0

@ R. Bemrose:http://www.boallen.com/random-numbers.html涵蓋了相同的主題。 – 2010-05-12 21:53:09

1

如果你只是想洗你的陣列項目,使用shuffle

shuffle($users); 
return $users; 

注意shuffle需要通過引用傳遞。所以你需要傳遞一個變量,然後進行混洗。