Page 1 sur 1

Random

Posté : 25 août 2008, 15:44
par Arno76
Bonjour,

Je souhaiterai faire un random jusque la pas de problème... :D

$un = rand(1,10);
$deux = rand(1,10)
$trois = rand(1,10);

Je voudrais que si numéro est déjà sorti qu'il ne ressorte pas dans le random suivant.

Merci pour votre aide ;)

Posté : 25 août 2008, 15:50
par guilt92
Et qu as tu tenté jusque la ?

A moins que tu veuille un code tout fait... :(

Perso je te donne une piste mais il faudra la traduire en code...

Il faudrait faire quelque chose du style :

Code : Tout sélectionner

nombre1 = random nombre2 = nombre1 tantque(nombre2==nombre1) nombre2=random
et ainsi de suite...

Posté : 25 août 2008, 15:55
par Arno76
Bonjour,

Je pensai a quelque chose comme ça mes je me demandai si il exister pas quelque chose de plus simple.
$un = rand(1,10);
		
$deux = rand(1,10);
		
if ($un == $deux) 	
{
     $deux = rand(1,10);
}	
Le problème est qu'il peut me ressortir aussi la même valeur donc en fessant sa avec plusieurs numéro ca fait beaucoup de vérification.... :D

Posté : 25 août 2008, 16:09
par Berzemus
Comme ça, en l'air, une idée, mais à voir si c'est viable ou pas...
$arr = new array(1,...10);

function randy(&$arr)
    {
    if (empty($arr)) die ('Thu!');
    $r = mt_rand(0,count($arr));
    $return = $arr[$r];
    array_splice($arr,$r,1);
    return $return;
    }
L'idée est d'avoir un tableau avec les valeurs possibles. A chaque demande d'un nombre aléatoire (par randy()), on choisit une valeur au hasard, et on l'efface du tableau. Du coup, on est sur de ne plus le revoir avant de recharger le script.. (mais du coup, on ne doit pas l'appeler plus de fois qu'il n'y a de valeurs possibles)

Posté : 25 août 2008, 16:12
par neurostim
if ($un == $deux)     
{
     $deux = rand(1,10);
}


Ca ne va pas aller.
Il faut une boucle.
 $un = mt_rand(1, 10);
 $deux = mt_rand(1, 10);
do { 
  $deux = mt_rand(1, 10);
} while ($un == $deux);

Posté : 25 août 2008, 16:47
par Arno76
Merci a vous ;)

Posté : 25 août 2008, 17:41
par Ryle
Et histoire d'éviter une quantité de if() et de while() à chaque fois que tu veux tirer un nouveau chiffre :
$tab = array();
while ( count($tab) < 3 ) { // tant qu'on a pas récupèré 3 résultats
  $nb = mt_rand(1, 10); 
  if (!in_array($nb, $tab)) // si le tableau ne contient pas le chiffre tiré, on l'ajoute
    $tab[] = $nb;
}
print_r($tab);

Posté : 25 août 2008, 18:11
par katagoto
On peux même faire mieu :
$tab = array();
while ( count($tab) < 3 ) { // tant qu'on a pas récupèré 3 résultats
  if (!in_array(mt_rand(1, 10), $tab)) // si le tableau ne contient pas le chiffre tiré, on l'ajoute
    $tab[] = $nb;
}
print_r($tab);
Post inutile, je sais...

Posté : 25 août 2008, 19:12
par neurostim
On peux même faire mieu :
$tab = array();
while ( count($tab) < 3 ) { // tant qu'on a pas récupèré 3 résultats
  if (!in_array(mt_rand(1, 10), $tab)) // si le tableau ne contient pas le chiffre tiré, on l'ajoute
    $tab[] = $nb;
}
print_r($tab);
Post inutile, je sais...
Pour moi c'est pas un post inutile.
C'est toujours mieux d'avoir mieux, non?

Posté : 25 août 2008, 19:36
par Berzemus
On peux même faire mieu :
$tab = array();
while ( count($tab) < 3 ) { // tant qu'on a pas récupèré 3 résultats
  if (!in_array(mt_rand(1, 10), $tab)) // si le tableau ne contient pas le chiffre tiré, on l'ajoute
    $tab[] = $nb;
}
print_r($tab);
Post inutile, je sais...
Pour moi c'est pas un post inutile.
C'est toujours mieux d'avoir mieux, non?
sauf que c'est mieux en rien.. il n'y a aucune différence de fonctionnement. On pourrait tout mettre sur une ligne aussi, et enlever tous les espaces blancs..