Maison > Article > développement back-end > PHP génère 10 nombres aléatoires non répétitifs
Question :
Il y a 25 œuvres pour voter Vous devez sélectionner 16 œuvres en un seul vote. Une seule œuvre ne peut être sélectionnée. une fois en un seul vote. Un programmeur a commis une erreur plus tôt et a oublié de stocker les votes dans la base de données. Les séquences de vote générées par 200 utilisateurs étaient vides. Alors, comment combler cette lacune ?
Il est nécessaire de générer 16 nombres aléatoires non répétitifs entre 1 et 25 pour remplir. Comment concevoir la fonction spécifiquement ? Stockez les nombres aléatoires dans un tableau, puis supprimez les valeurs en double dans le tableau pour générer un certain nombre de nombres aléatoires non répétitifs.
Le programme est le suivant :
<?php /* * array unique_rand( int $min, int $max, int $num ) * 生成一定数量的不重复随机数 * $min 和 $max: 指定随机数的范围 * $num: 指定生成数量 */ function unique_rand($min, $max, $num) { $count = 0; $return = array(); while ($count < $num) { $return[] = mt_rand($min, $max); $return = array_flip(array_flip($return)); $count = count($return); } shuffle($return); return $return; } $arr = unique_rand(1, 25, 16); sort($arr); $result = ''; for($i=0; $i < count($arr);$i++) { $result .= $arr[$i].','; } $result = substr($result, 0, -1); echo $result; ?>
Les résultats en cours d'exécution sont les suivants :
2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24
Instructions supplémentaires :
1. La fonction mt_rand() est utilisée pour générer des nombres aléatoires. Cette fonction génère des nombres aléatoires quatre fois plus rapidement en moyenne que rand().
2. Lors de la suppression des valeurs en double du tableau, la "méthode flip" est utilisée, qui consiste à utiliser la fonction array_flip() pour échanger deux fois la clé et la valeur du tableau. Cette approche est beaucoup plus rapide que l’utilisation de la fonction array_unique().
3. Avant de renvoyer le tableau, utilisez d'abord shuffle() pour attribuer un nouveau nom de clé au tableau, en vous assurant que le nom de clé est un nombre consécutif de 0 à n. Si cette étape n'est pas effectuée, les noms de clés peuvent être discontinus lors de la suppression des valeurs en double, provoquant des problèmes de parcours.
Tutoriel recommandé : 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!