Un chiffre aléatoire mais uniquement dans une boucle php

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 15 Octobre 2016.

  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    531
    J'aime reçus:
    0
    Bonjour,

    je souhaite afficher 5 lignes de code php. Pour cela je fais appel à une boucle while. Dans cette boucle, je souhaite que chaque ligne possède un chiffre aléatoire avec un rand(). Jusqu’à présent, j'ai parfois 2 chiffres identique dans mes 5 lignes. Comment faire pour avoir 5 chiffres différents et ne pas me retrouver comme actuellement avec 2, 3, 4 ou 5 chiffres identique ?

    Code:
    while ($nb <= 5)
    {
        $pic = rand(1, 15);
         
        $page .='test : '.$pic.'<br><br>';
        $nb++;
    }
    Merci d'avance
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 988
    J'aime reçus:
    281
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />$numbers&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">range</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">15</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$randomKeys&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">array_rand</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$numbers</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">5</span><span class="syntaxkeyword">);<br />foreach&nbsp;(</span><span class="syntaxdefault">$randomKeys&nbsp;</span><span class="syntaxkeyword">as&nbsp;</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span class="syntaxdefault">$numbers</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">]&nbsp;.&nbsp;</span><span class="syntaxdefault">PHP_EOL</span><span class="syntaxkeyword">;<br />}&nbsp;</span><span class="syntaxdefault"></span>
     
  3. indigene
    indigene WRInaute accro
    Inscrit:
    7 Septembre 2003
    Messages:
    4 119
    J'aime reçus:
    169
    Pour ton premier chiffre aléatoire il n'y a pas de problème.
    Pour le deuxième il faut continuer à boucler sur la génération d'un chiffre aléatoire s'il est identique au premier
    Pour le troisième il faut continuer à boucler sur la génération d'un chiffre aléatoire s'il est identique au premier ou au deuxième
    Pour le quatrième il faut continuer à boucler sur la génération d'un chiffre aléatoire s'il est identique au premier ou au deuxième ou au troisième
    Bien sur, il faut ceci seulement si le nombre maximum pour la génération de chiffre aléatoire est bien supérieur à 3 car sinon tu entres dans des boucles infinies.
     
  4. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    531
    J'aime reçus:
    0
    Merci beaucoup pour vos réponses. Spout, PHP_EOL sert à quoi exactement ?
     
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 988
    J'aime reçus:
    281
  6. FortTrafic
    FortTrafic WRInaute passionné
    Inscrit:
    11 Décembre 2012
    Messages:
    1 210
    J'aime reçus:
    18
    Code:
    $pic = range(1, 15);
    shuffle($pic);
    for ($i = 0; $i < 5; $i++) $page .='test : '.$pic[$i].'<br><br>';
    
     
  7. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    533
    J'aime reçus:
    63
    Et pour le fun :
    Au lieu de 5 valeurs distinctes entre 1 et 15, vous devez trouver 50.000 valeurs distinctes entre 1 et 1 million.
    Quelle est la méthode la plus rapide (en restant raisonnable niveau mémoire) ?
    ^_^
     
  8. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 988
    J'aime reçus:
    281
  9. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    533
    J'aime reçus:
    63
    Peut-être, mais j'en doute. Sans code à benchmarker, je ne peux pas me prononcer : je n'ai jamais utilisé ArrayIterator.
     
  10. indigene
    indigene WRInaute accro
    Inscrit:
    7 Septembre 2003
    Messages:
    4 119
    J'aime reçus:
    169
    et les tables temporaires ?
    C'est directement géré par le SQL. Chaque nombre aléatoire tu commence par accéder à la table temporaire pour vérifier qu'il n'existe pas et ensuite tu le stocke dans la table temporaire
    Mais je n'ai jamais utilisé les tables temporaires. C'est juste une idée
     
  11. FortTrafic
    FortTrafic WRInaute passionné
    Inscrit:
    11 Décembre 2012
    Messages:
    1 210
    J'aime reçus:
    18
    Est-ce rapide ? Mais il faut créer un gros array :

    Code:
    $hasard = range(1,1000000);
    shuffle($hasard);
    $hasard = array_slice($hasard, -50000);
    
    Ca peut s'écrire en une ligne :
    Code:
    $hasard = array_rand(range(1,1000000), 50000);
    
     
  12. FortTrafic
    FortTrafic WRInaute passionné
    Inscrit:
    11 Décembre 2012
    Messages:
    1 210
    J'aime reçus:
    18
    Bon, en cherchant sur Google en fait il paraît qu'il vaut mieux ça pour la mémoire :
    Code:
    $hasard = array();
    while(count($hasard) != 50000) {
     $hasard[rand(1, 1000000)] = 1;
    }
    $hasard = array_keys($hasard);
    
     
  13. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    533
    J'aime reçus:
    63
    Oui c'est mieux niveau mémoire, la consommation étant proportionnelle avec le nombre d'éléments à trouver plutôt que l'intervalle des valeurs possibles (20x moins).
    Par contre niveau vitesse, il y a moyen de faire plus de 10x plus rapide ;-)
     
  14. FortTrafic
    FortTrafic WRInaute passionné
    Inscrit:
    11 Décembre 2012
    Messages:
    1 210
    J'aime reçus:
    18
    Utiliser mt_rand() au lieu de rand() ? La doc PHP dit que c'est 4 fois plus rapide. :)

    J'ai lu aussi qu'utiliser mt_rand() est plus rapide qu'utiliser mt_rand(X,Y)... donc est-ce que tu veux dire un truc comme ça ?
    Code:
    $hasard = array();
    while(count($hasard) != 50000) {
     $hasard[substr(mt_rand(),0,6)+1] = 1;
    }
    $hasard = array_keys($hasard);
    
    J'ai mesuré les deux façons et celle-çi est plus lente.
     
  15. FortTrafic
    FortTrafic WRInaute passionné
    Inscrit:
    11 Décembre 2012
    Messages:
    1 210
    J'aime reçus:
    18
    Je veux dire j'ai mesuré les deux façons entre utiliser mt_rand(1,1000000) et substr(mt_rand(),0,6)+1 et la deuxième est plus lente.
    Sinon entre rand(1,1000000) et mt_rand(1,1000000) c'est bien mt_rand le plus rapide.

    Ca doit être autre chose que tu as en tête :)
     
  16. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    533
    J'aime reçus:
    63
    Que la fonction libc mais pas que rand(). J'ai l'impression que l'une est l'alias de l'autre car quand je fais un bench, les deux prennent exactement le même temps.

    Ma technique :
    Code:
    $pics = [];
    for ($j = 0; $j < 5000; $j++)
    {
    	do
    		$pic = mt_rand(1, 1000000);
    	while (isset($pics[$pic]));
    	$pics[$pic] = 1;
    }
    $pics = array_keys($pics);
    
    Dans le principe c'est proche de la version que tu avais partagée après ta recherche Google. La différence de perfs vient du fait qu'il n'y a pas de count() qui est assez lent : on essaye une valeur aléatoire, si c'est une nouvelle c'est bon, sinon on en cherche une autre aussitôt.

    Bon après c'est pas une technique universellement plus rapide (ça l'est quand le nombre de valeurs à trouver est bien inférieur au range), c'était juste pour le fun.
     
Chargement...
Similar Threads - chiffre aléatoire uniquement Forum Date
Affichage chiffre d'affaires et taux de conversion zéro Google Analytics 26 Février 2020
Paiement suite à chiffre d'affaire sur autoentrepreneur.urssaf AdSense 1 Décembre 2019
Search Console Actualisation chiffres Search Console, quelle fréquence ? Crawl et indexation Google, sitemaps 5 Avril 2019
Sitemaps et état de l'indexation : chiffres différents Crawl et indexation Google, sitemaps 9 Août 2018
Le TF et ses signes < > et ses chiffres Débuter en référencement 24 Mai 2018
Chiffrer son disque dur - Veracrypt Le café de WebRankInfo 21 Février 2018
J'ai un site d'affiliation que je gère j'ai fait des bons chiffre l'année dernière mais. Débuter en référencement 9 Février 2017
Campagnes pas rentables - que pensez-vous de ces chiffres AdWords 3 Mai 2016
CA : chiffre d'affaire Débuter en référencement 15 Janvier 2016
Chiffres et tiret [nom de domaine] Noms de domaine et référencement 24 Juillet 2015
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice