Comment PHP utilise rand pour générer des nombres aléatoires non répétitifs : attribuez d'abord une valeur à chaque nombre du tableau dans l'ordre de son indice, puis commencez à prendre des nombres aléatoires dans la plage [i, $num-1] ; [$ rand], et utilisez le nombre aléatoire obtenu [$rand] comme position actuelle dans le tableau ; enfin, effectuez des opérations alternées sur les paires clé-valeur inchangées.
PHP utilise rand pour générer des nombres aléatoires non répétitifs :
/* * 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 un nombre aléatoire à chaque fois Stockez-le dans un tableau puis supprimez les doublons... c'est inefficace... Je ne veux pas utiliser
PHP pour générer efficacement m nombres aléatoires uniques dans la plage n (m<=n)
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 de tableau d'origine (clé == valeur ).
4. Fin.
Recommandations d'apprentissage gratuites associées : programmation php(vidéo)
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!