Maison > Article > développement back-end > PHP génère efficacement un nombre aléatoire non répétitif
Méthode d'encapsulation PHP pour générer un tableau aléatoire
/* * array unique_rand( int $min, int $max, int $num ) * 生成一定数量的不重复随机数 * $min 和 $max: 指定随机数的范围 * $num: 指定生成数量 */ function unique_rand($min, $max, $num) { //初始化变量为0 $count = 0; //建一个新数组 $return = array(); while ($count < $num) { //在一定范围内随机生成一个数放入数组中 $return[] = mt_rand($min, $max); //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。 $return = array_flip(array_flip($return)); //将数组的数量存入变量count中 $count = count($return); } //为数组赋予新的键名 shuffle($return); return $return; }
Cette méthode obtient à chaque fois des nombres aléatoires et les stocke dans le tableau avant de les dédupliquer... Inefficace... Je ne souhaite pas utiliser
PHP est efficace Générer m nombres aléatoires non répétitifs dans la plage n (m
Remarque : Il est également mentionné dans le livre "Programming Pearls", intitulé "Comment pour générer efficacement m n plages" Nombres aléatoires non répétitifs dans (m
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, après avoir obtenu un nombre aléatoire, il sera exclu de la plage de valeurs, et la prochaine fois, il ne sera sélectionné que parmi les nombres restants. La sélection de nombres aléatoires peut être effectuée en un seul parcours, ce qui. est très 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és dans l’ordre correspondant.
2.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 valeur actuelle dans le tableau La clé de position i correspond à la valeur de l'indice $rand, et la valeur correspondant à l'indice de la clé $rand dans le tableau est remplacée par i. Il s'agit en fait d'un échange croisé de valeurs de clé du 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 à la position où le tableau d'origine est disposé séquentiellement (clé == valeur) Effectuer des opérations alternées.
4.Fin.
Comme indiqué ci-dessus, obtenez 10 exemples partiels de nombres aléatoires.
Pour plus de questions liées à PHP, veuillez visiter le site Web PHP chinois : Tutoriel vidéo PHP
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!