Générer un nbre aléatoire en PHP
Stéphane
-
PhP Messages postés 1770 Date d'inscription Statut Membre Dernière intervention -
PhP Messages postés 1770 Date d'inscription Statut Membre Dernière intervention -
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 :-)
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:
- Générer un nbre aléatoire en PHP
- Comment générer un qr code - Guide
- Generer mot de passe - Télécharger - Sécurité
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Comment generer une table de matiere automatiquement - Guide
1 réponse
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 ]]
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 ]]