begin process at 2012 05 31 10:38:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Tirer un nombre au hazard


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Tirer un nombre au hazard

samedi 27 décembre 2008 à 18:53:39 | Tirer un nombre au hazard

lolosav

Bonjour
et bonne fêtes à tous !

je vous expose mon probléme !

je suis en train de créer un jeu-question !

je vais entrer dans un tableaux un nombre (10 pour commencer) qui correspondra une question , rep , etc

ex $test[0 ]---question 0, rep,soluce , etc ca, ca marche (je vais chercher dans une Bdd que j'ai crée)

Mon probléme j'arrive à faire une boucle for jusque 10 avec rand pour avoir 10 questions au hazard ,mais je n'arrive pas a faire le test pour qu'il ne reprenne pas le même nombre !

un de mes test

<?php
$i=0;
$test[0]=rand(1,10);
do
{
$i++;
$num = rand(1,10);

for ($a=0;count($test);$a++)
 {
  if ($test[$a]=$num)
  {
  echo 'test:',$test[$a],"<br>";
  break;
  }else{
  $test[$a]=$num;
  }
 }
}
while ($i<10);

?>


voila merci pour votre aide  

samedi 27 décembre 2008 à 19:31:48 | Re : Tirer un nombre au hazard

kohntark

Membre Club
Réponse acceptée !
Salut,

Franchement je n'ai rien compris à ton code. Tu te compliques beaucoup la tâche.
Est ce que ce code réponds à ta demande ou il y a un truc que je n'ai pas capté ?

$nb_questions = 10;
$mem = array();
$i = 0;

do {
  if ($i >= $nb_questions) break;
  $rand = rand(1,$nb_questions);
  if (!in_array($rand, $mem)) {
    array_push($mem, $rand);
    echo 'question n°'.$rand.'<br />';
  } else continue;
  $i++;
} while (true);


Cordialement,

Kohntark -

samedi 27 décembre 2008 à 19:57:19 | Re : Tirer un nombre au hazard

lolosav

merci 
J'ai l'impression que oui !
Pourrais tu m'expliquer un peu ton code !
Car j'en comprend un peu mais j'ai l'impression que tout est condensé !
samedi 27 décembre 2008 à 20:34:39 | Re : Tirer un nombre au hazard

kohntark

Membre Club
Réponse acceptée !
Re,

$nb_questions = 10; // nombre total de questions
$mem = array(); // init du tableau qui contiendra les n° des questions déjà tirées
$i = 0; // init var permettant de sortir de la boucle

do {
  if ($i >= $nb_questions) break; // toutes les questions ont été tirées, on sort
  $rand = rand(1,$nb_questions); // num aléatoire entre 1 et le nb de questions disponibles
  if (!in_array($rand, $mem)) { // si le n° de la question n'a pas encore été tiré ($rand)
    array_push($mem, $rand); // on le rentre dans le tableau
    echo 'question n°'.$rand.'<br />'; // on pose la question
  } else continue; // le n° de question aléatoire a déjà été tiré, on continue avec un nouveau nombre aléatoire
  $i++; // incrémente le nombre de questions posées
} while (true);

Attention, ce script n'est valable que si tu n'as pas beaucoup de questions, car il perds du temps à chaque fois qu'il rencontre un nombre déjà tiré (dans ce cas là il refait une boucle (continue))

Je pense que le mieux est de faire ainsi :
$t = range(1, $nb_questions); // génère un tableau entre 1 et le nombre de questions dispo
$t = array_rand ($t); // mélange aléatoirement le tableau

foreach ($t as $k=>$v) { // pour chaque valeur du tableau
    echo 'question n°'.$v.'<br />'; // on pose la question correspondante
}

C'est beaucoup plus simple, beaucoup moins lourd et vraiment plus rapide.


Cordialement,

Kohntark -

samedi 27 décembre 2008 à 21:18:04 | Re : Tirer un nombre au hazard

kohntark

Membre Club
Salut,

Je viens de m'apercevoir qu'il y a une erreur d'inattention dans mon code, il faut remplacer :
$t = range(1, $nb_questions); // génère un tableau entre 1 et le nombre de questions dispo
$t = array_rand ($t); // mélange aléatoirement le tableau
par :
$tt = range(1, $nb_questions); // génère un tableau entre 1 et le nombre de questions dispo
$t = shuffle($tt); // mélange aléatoirement le tableau

Par curiosité je viens de faire un bench sur le premier et le seconde code :
Temps d'éxécution :

Pour 100 questions :
1er code :  0.00318 sec (341 nombres aléatoires déjà tiré = 341 boucles do pour rien)
2eme code : 0.00026 sec

Pour 10000 questions :
1er code :  14.25654 sec (21902 nombres aléatoires déjà tiré !!)
2eme code : 0.02322 sec


Cordialement,


Kohntark-
samedi 27 décembre 2008 à 23:12:59 | Re : Tirer un nombre au hazard

lolosav

Ouah !!!
merci pour ta réponse !
C'est triste mais je viens de m'apercevoir que vraiment j'ai du boulot en Php!!!
Mais d'un autre coté tant mieux !

Pour revenir au code :
je ne comprend pas :"else continue" , le continue , c'est une fonction ?

et aussi "while (true);" qu'est ce qui doit être vrai ?

Merci de prendre de temps ;)
dimanche 28 décembre 2008 à 11:30:09 | Re : Tirer un nombre au hazard

kohntark

Membre Club
Réponse acceptée !
Salut,

Jette un oeil à ces 2 liens :
continue
do while

if (!in_array($rand, $mem)) {
[...]
} else continue;
$i++;


=> si le nombre a déjà été tiré (il est déjà dans le tableau $mem), on "continue", c'est à dire qu'on reboucle (do) sans exécuter le reste de la boucle ($i++)

while(true);
=> cette condition est toujours vrai, la sortie de la boucle do ne se fait pas par ce while, mais par le break.
Ca reviens au même que d'écrire ça :
} while ($i > $nb_questions); (et de supprimer le if($i>=...) de la boucle do)

Cordialement.

Kohntark -

dimanche 28 décembre 2008 à 15:17:20 | Re : Tirer un nombre au hazard

lolosav

Merci pour tout !


Cette discussion est classée dans : nombre, test, question, rand, hazard


Répondre à ce message

Sujets en rapport avec ce message

Question en php... [ par schlim ] J'ai une question.J'ai un tableau avec un certain nombre de nombre....Ce que je cherche c une fonction qui me permettrais de garder les doublons et él empecher un nombre d'etre choisit au hasard. [ par tomatokatchup ] est il possible d'empecher un nombre d'tre choisit au hasart par la fonction rand() tout en gardant une selection comprise entre deux chiffre.exemple: test d'ergonomie [ par hackademius ] salut a tous , je sais que ce ne pas l'endroit ideal pour poster ce genre de message, mais bon , je sais qu'ici , il y ades pros du php et css, donc j gestion des pages dans le forum [ par davwart ] Bonjour,petite suggestion concernant le forum :vu que en face de la liste de chaque question apparait le nombre de réponse, ne serait-il pas possible, Nombre Aléatoir RAND [ par m2rtech ] Bonjour, Je voudrais generer un nombre aléatoir à 6 chiffres avec rand();<font color= export CSV particulier URGENT HELP!!! [ par ronanT95 ] Bonjour à tousje requiert votre aide pour un souci sur lequel j'ai buté toute la journée. voilà, pour ma boite, j'ai créé une interface qui me permet Nombre de requêtes [ par Garno ] Bonjour a tous, Ma question est une question totalement théorique que je me pose depuis quelques temps. Je travaille a la conception d'un "framework" Question sur une erreur [ par defkrie ] Voici une portion de code qui me pose souci$test="abcdefghijklmnopqrstuvwxyz";$chaine="Le chat est mort.";for($i=0;$i if(ereg(substr($chaine,$i Erreur de script [ par defkrie ] $test="abcdefghijklmnopqrstuvwxyz";$chaine="Le chat est mort.";for($i=0;$iif(ereg(substr($chaine,$i,1),$test)){echo substr($chaine,$i,1).":True";}}voi Question sur base de donnée [ par keep cool ] Bonjour, je me demande s'il est possible qu'un résultat d'une base de donnée donne accésà un lien. je m'explique: je prend l'exemple d'une liste de pa


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,420 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales