Maison >développement back-end >Problème PHP >Comment générer des numéros uniques en php
Comment générer des nombres uniques en PHP : initialisez d'abord la variable à 0 ; puis créez un nouveau tableau et générez aléatoirement un nombre dans une certaine plage et placez-le dans le tableau, puis supprimez les valeurs en double dans le tableau ; array; enfin Le numéro du tableau est stocké dans la variable count et un nouveau nom de clé est donné au tableau.
Recommandé : "Tutoriel PHP"
Méthode d'encapsulation PHP pour générer un tableau aléatoire non répétitif
/* * 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 un tableau avant de les dédupliquer... Inefficace... Je ne veux pas utiliser
PHP pour générer efficacement m nombres non dupliqués dans la plage n Nombre aléatoire (m
Remarque : il est également mentionné dans le livre "Programming Pearls", intitulé "Comment générer efficacement m nombres aléatoires non répétitifs dans la plage de n (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 qu'un nombre aléatoire est. pris, il est exclu de la plage de valeurs, comme suit. Seuls les nombres restants seront sélectionnés à la fois, et 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 pour 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.
Processus d'échange partiel de tableau séquentiel
Comme indiqué ci-dessus, obtenez 10 exemples partiels de nombres aléatoires.
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!