Maison >développement back-end >Problème PHP >le nombre aléatoire php ne se répète pas
PHP génère efficacement m nombres aléatoires uniques dans la plage n (m
Remarque : Il est également mentionné dans le livre "Programming Pearls", le titre est "Comment générer efficacement m nombres aléatoires non répétitifs dans la plage de n (mMise en route avec Programmation PHP À maîtriser )
Cet algorithme prend très intelligemment la position du nombre aléatoire (l'indice du tableau) au lieu de prendre le nombre aléatoire lui-même à chaque fois qu'un nombre aléatoire est pris. , c'est le cas. S'il est exclu de la plage de valeurs, il ne sera sélectionné que parmi les nombres restants la prochaine fois. La sélection de nombres aléatoires peut être effectuée en un seul parcours, ce qui est assez efficace.
function rand_num($num='200'){ for($i=0;$i<$num;$i++){ $n[$i] = $i; } for($i=0;$i<$num;$i++){ $rand = mt_rand($i,$num-1); //数组 随机数交换下标 if($n[$i] == $i){ $n[$i] = $n[$rand]; $n[$rand] = $i; } } }
1. La première étape consiste à attribuer une valeur à chaque nombre du tableau dans l'ordre de son indice et à obtenir un tableau de valeurs de clés numériques $num disposées dans l'ordre correspondant.
2. Dans la deuxième étape, commencez à obtenir le nombre aléatoire $rand dans la plage [i, $num-1] et utilisez le nombre aléatoire obtenu $rand comme indice correspondant à la clé de position actuelle. i dans le tableau Value $rand, remplacez la valeur correspondant à l'indice de la clé $rand dans le tableau par i. Il s'agit en fait d'un échange croisé de valeurs de clé de tableau. Le sens est d'exclure le nombre aléatoire généré de la plage de valeurs [i,$num-1], et la prochaine fois, il prendra la valeur des nombres restants [i+1,num-1].
3. La troisième étape, afin d'éviter les valeurs répétées, effectuez uniquement des opérations alternées sur les paires clé-valeur inchangées, c'est-à-dire effectuez des opérations alternées sur les positions de la séquence du tableau d'origine (clé == valeur ).
4. Fin.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!