Maison  >  Article  >  développement back-end  >  PHP génère de manière aléatoire des nombres aléatoires qui ne sont pas compris dans une plage

PHP génère de manière aléatoire des nombres aléatoires qui ne sont pas compris dans une plage

王林
王林original
2019-09-19 11:53:592642parcourir

PHP génère de manière aléatoire des nombres aléatoires qui ne sont pas compris dans une plage

Idée : stockez les nombres aléatoires générés 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.

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.

Vous pouvez également stocker des valeurs dans une plage spécifiée dans un tableau, puis 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.

Le code de la première méthode est donné ci-dessous, et la deuxième méthode est plus simple.

<?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, ",");
?>

Résultats d'exécution : 48,5,19,36,63,72,82,77,46,16
Instructions supplémentaires :

1. Lors de la génération de nombres aléatoires, nous utilisons la fonction mt_rand(). 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 est beaucoup plus rapide que l'utilisation de array_unique() tout en supprimant les valeurs en double du tableau.

3. Avant de renvoyer le tableau, utilisez shuffle() pour attribuer de nouveaux noms de clés au tableau, en vous assurant que les noms de clés sont des nombres consécutifs 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.

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!

Déclaration:
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