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

Fermé
Stéphane - 27 janv. 2002 à 17:38
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 - 29 janv. 2002 à 00:32
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 :-)
A voir également:

1 réponse

PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
29 janv. 2002 à 00:32
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