Fonction aléatoire sur tableaux

Signaler
Messages postés
9
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
21 juin 2011
-
asdr
Messages postés
9
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
21 juin 2011
-
Bonjour,

Je travail en ce moment sur une fonction permettant de choisir 2 nombres aléatoirement dans un tableau de valeurs définies, sachant que le deuxième nombre doit être différent du premier et qu'il ne doit jamais avoir été tiré en même temps que le premier (pour cela je parcours un deuxième tableau de valeurs).

Je suis dessus depuis plusieurs jours et je dois avouer que je bloque ... surtout sur la logique.

Voici mon code simplifié :

<?php
$tableau_valeurs array(24> 32, 32 => 24.39);
$tableau_valeurs_2 array(1> 24, 2 => 32, 3 =>39);
$nombres_elements = 3;
$i = 0;

$chiffre_aleatoire_1 = array_rand ($tableau_valeurs_2, 1);
$chiffre_aleatoire_2 = array_rand ($tableau_valeurs_2, 1);

if (isset($tableau_valeurs[$tableau_valeurs_2[$chiffre_aleatoire_1]])){
$tableau_valeurs_separes = explode ('.', $tableau_valeurs[$tableau_valeurs_2[$chiffre_aleatoire_1]]);
$nombre_valeurs_separes = count ($tableau_valeurs_separes);
while (($i 0)||($chiffre_aleatoire_2 $chiffre_aleatoire_1)){
for ($j = 0; $j <= $nombre_valeurs_separes; $j++){
if ($tableau_valeurs_2[$chiffre_aleatoire_2] == $tableau_valeurs_separes[$j]){
break;
}
if (($j == $nombre_valeurs_separes)&&($chiffre_aleatoire_2 != $tableau_valeurs_separes[$j])){
$i = 1;
}
}
if ($chiffre_aleatoire_2 < $nombres_elements){
$chiffre_aleatoire_2 = $chiffre_aleatoire_2 + 1;
}
else{
$chiffre_aleatoire_2 = 1;
if($chiffre_aleatoire_2 == $chiffre_aleatoire_1){
$chiffre_aleatoire_2 = $chiffre_aleatoire_2 + 1;
}
}
}
}
echo 'chiffre aleatoire 1 :'.$tableau_valeurs_2[$chiffre_aleatoire_1];
echo '
chiffre aleatoire 2 :'.$tableau_valeurs_2[$chiffre_aleatoire_2];
?>


Qu'en pensez-vous ?
Sachant que la fonction me renvoi régulièrement deux messages d'erreurs pour des offsets indéfinis, et que parfois les deux nombres sont les mêmes !

3 réponses

Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

Une méthode qui marche pas mal pour ce genre de choses est de faire des permutations aléatoires sur ton tableau puis de prendre les indices dans l'ordre...

en gros (code pas testé, mais pour l'idée):
function nombreAleatoire($tableau){
   static $n = 0;
   for($i=0;$i<1000;$i++){
      $a = rand(0,count($tableau)-1);
      $b = rand(0,count($tableau)-1);
      $t = tableau[$a];
      $tableau[$a] = $tableau[$b];
      $tableau[$b] = $t;
   }
   return $tableau[$n++];
}
Messages postés
9
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
21 juin 2011

J'aurai peut-etre du préciser que le deuxieme nombre tiré aléatoirement doit etre different des valeurs contenu dans le premier tableau à l'indexe qui a pour valeur le premier nombre tiré aléatoirement.

Exemple :

tableau1 = 1, 2 , 3 , 4

1 = 2,3,4
2 = 3,4
3 = 3
4 = 1,3

Imaginons que l'on tire le premier nombre :
2

Il faudra alors que le deuxième nombre soit différent de :
3 et 4
Messages postés
9
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
21 juin 2011

Bon je vais changer ma logique de fonctionnement et faire en sorte que chaque nombre ne peut être tiré qu'une fois par jour, ainsi j'évite les doublons et je me facilite la vie !