Random

Eléphant du PHP | 136 Messages

25 août 2008, 15:44

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

Mammouth du PHP | 1353 Messages

25 août 2008, 15:50

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...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 136 Messages

25 août 2008, 15:55

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

ViPHP
ViPHP | 4039 Messages

25 août 2008, 16:09

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)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 10 Messages

25 août 2008, 16:12

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

Eléphant du PHP | 136 Messages

25 août 2008, 16:47

Merci a vous ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 août 2008, 17:41

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);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 1668 Messages

25 août 2008, 18:11

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...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 10 Messages

25 août 2008, 19:12

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?

ViPHP
ViPHP | 4039 Messages

25 août 2008, 19:36

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..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.