Comment générer N nombres aléatoires uniques dans une plage spécifiée en PHP ?

coldplay.xixi
Libérer: 2023-03-02 16:58:01
original
2267 Les gens l'ont consulté

Comment PHP génère N nombres aléatoires uniques dans une plage spécifiée : stockez d'abord les valeurs dans la plage spécifiée dans un tableau ; puis utilisez [shuffle($array)] pour perturber le tableau et enfin, interceptez simplement ; un certain nombre de valeurs.

Comment générer N nombres aléatoires uniques dans une plage spécifiée en PHP ?

Comment générer N nombres aléatoires non répétitifs dans une plage spécifiée par PHP :

Idée : Générer par en stockant des nombres aléatoires dans un tableau, puis en supprimant les valeurs en double du tableau, un certain nombre de nombres aléatoires non répétitifs peuvent être générés.

Dans le développement de sites Web PHP, nous devons parfois générer un certain nombre de nombres aléatoires non répétitifs dans une plage spécifiée. Comment concevoir spécifiquement cette fonction pour générer des nombres aléatoires ? Nous pouvons stocker des nombres générés aléatoirement dans un tableau, mais en supprimant les valeurs en double lors de leur stockage, un certain nombre de nombres aléatoires non répétitifs peuvent être générés. Bien sûr, vous pouvez également stocker des valeurs dans une plage spécifiée dans un tableau, utiliser shuffle($array) pour perturber le tableau, puis intercepter un certain nombre de valeurs. Mais cette dernière méthode générera un tableau plus grand lorsque la plage spécifiée de nombres aléatoires est trop grande.

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

Le code de la première méthode est donné ci-dessous, et la deuxième méthode est plus simple , vous pouvez l'essayer, c'est presque pareil

<?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;
}
//生成10个1到100范围内的不重复随机数
$arr = unique_rand(1, 100, 10);
echo implode($arr, ",");
?>
Copier après la connexion

Le programme fonctionne comme suit :

48,5,19,36,63,72,82,77,46, 16

Quelques notes supplémentaires :

1 Nous avons utilisé la fonction mt_rand() lors de la génération de nombres aléatoires. Cette fonction génère des nombres aléatoires plusieurs 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 array_flip() pour échanger deux fois la clé et la valeur du tableau. Cette approche supprime les valeurs en double du tableau et est beaucoup plus rapide que l'utilisation de array_unique().

3. Avant de renvoyer le tableau, utilisez 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 vous n'effectuez pas cette étape, les noms de clés peuvent être discontinus lors de la suppression des valeurs en double. Il y aura des problèmes si vous utilisez for pour parcourir, mais si vous utilisez foreach ou si vous n'avez pas besoin de parcourir, vous n'avez pas besoin de lecture aléatoire.

Résumé

Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence et d'apprentissage pour l'étude ou le travail de chacun. Merci. pour votre révision du script Home support. Si vous souhaitez en savoir plus sur le contenu connexe, veuillez consulter les liens pertinents ci-dessous

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal