Générer un nbre aléatoire en PHP

Stéphane -  
PhP Messages postés 1774 Statut Membre -
J'aimerais générer plusieurs nombres aléatoires différents (entiers positifs) en fonction du nombre d'entrés.

Ainsi, si j'ai x entrées, j'ai besoin de x nombres différents compris entre 1 et x.

Bref, si j'ai 4 entrées, je veux 1, 2, 3 et 4 mais dans un ordre aléatoire et pas 1, 1, 3 et 4 car il me faut des nombres différents.

Ca être possible?

Merci :-)

1 réponse

  1. PhP Messages postés 1774 Statut Membre 606
     
    Slt Stéphane,

    Pour ton pb je génére un tableau de x entrées contenant la suite des nombre de 1 à x.
    Ensuite je mélange les éléments du tableau en les échangeants x fois de façon pseudo aléatoire.

    Car tirer au sort et tester à chaque fois qu'un nombre n'est pas déjà sorti serait trop fastidieux et réclamerait plus de temps (surtout pour les dernières valeurs !)

    <?php
    $tirage=array();

    function rnd($x)
    {
    global $tirage;
    for ($i=0; $i < $x; $i++) $tirage[$i]=$i+1;

    srand((float) microtime()*1000000);

    for ($i=0; $i < $x; $i++)
    {
    $rang=rand(1,$x-1);

    // Swap
    $dummy=$tirage[$rang];
    $tirage[$rang]=$tirage[$i];
    $tirage[$i]=$dummy;
    }

    }

    ?>

    <html>
    <head>
    </head>

    <body>
    <?php
    $x=20;
    rnd(20);

    for ($i=0; $i<$x; $i++) echo "tirage[".($i+1)."]=".strval($tirage[$i])."<br>\n";
    ?>
    </body>
    </html>

    On doit pouvoir améliorer en passant le tableau en paramètre par ex.

    Attention !!! : suivant la version de Php la syntaxe de la fonction
    rand() change. Avec une version récente il faut écrire
    rand (1,$x) et plus rand(1,$x-1) du moins je crois ... ;:-)

    @+
    Philippe

    [[  The Truth is Out There   ]]
    2