2010-05-12 5 views
2

J'ai une fonction qui appelle un utilisateur utilisateurs associés d'une table. La fonction utilise ensuite le rand(); fonction à choisir dans le tableau 5 userID choisis au hasard cependant! ...Rand(); avec exclusion à et déjà généré au hasard nombre ..?

Dans le cas où un utilisateur n'a pas beaucoup d'utilisateurs associés mais au-dessus de la min (si dessous le 5 il retourne juste le tableau tel qu'il est) alors il donne de mauvais résultats en raison de la répétition des numéros de rand ...

Comment surmonter ce problème ou exclure un numéro de rand précédemment sélectionné du rand suivant(); appel de fonction.

Voici la section du code qui fait le travail. Attention, ceci doit être très efficace car ce script est utilisé partout.

$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; 

Merci d'avance! Stefan

Répondre

3

La façon la plus simple est d'utiliser 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 savoir pourquoi vous devez utiliser mt_rand() au lieu de rand().

+0

Pour une raison quelconque, je ne peux pas charger ce lien. – Powerlord

+0

@R. Bemrose: http://www.boallen.com/random-numbers.html couvre le même sujet. –

1

Si vous voulez juste mélanger vos éléments du tableau, utilisez shuffle:

shuffle($users); 
return $users; 

Notez que shuffle nécessite passe par référence. Vous devez donc passer une variable qui est ensuite mélangée.