Maison  >  Article  >  développement back-end  >  Implémentation de la fonction d'enveloppe rouge aléatoire en PHP

Implémentation de la fonction d'enveloppe rouge aléatoire en PHP

小云云
小云云original
2018-01-26 13:45:261672parcourir

Cet article présente principalement l'algorithme d'enveloppe rouge aléatoire implémenté en PHP. Il analyse les principes, les méthodes d'implémentation et les précautions associées sous forme d'exemples. J'espère que les amis dans le besoin pourront s'y référer. peut aider tout le monde.

1. Conception globale

Il existe de nombreux types d'algorithmes, vous pouvez choisir vous-même l'"architecture" principale. utilisez la commande redis decr( ) pour limiter le courant, utilisez mysql pour enregistrer diverses données requises

2. Algorithme de l'enveloppe rouge

Pour le bien par simplicité, le montant de l'enveloppe rouge est un entier Expression, en supposant que chaque enveloppe rouge contient *2, Il faut pré-attribuer un haricot à chaque personne au début

Statistiques multiples

function randBean($total_bean, $total_packet)
{
  $min_bean = 1;
  $max_bean = 5000;
  $range = 2;
  $total_bean = $total_bean - $total_packet * $min_bean; //每个人预留一个最小值
  $list = [];
  $min = 1;
  while(count($list) < $total_packet){
    $max = floor($total_bean / $total_packet) * $range;
    $bean = rand($min, $max);
    if ($bean <= $max_bean - 1) {
      $list[] = $bean;
      $total_bean -= $bean;
    }
  }
  $list[] = $total_bean;//剩余的金豆作为最后一个红包
  //合并
  foreach ($list as $k => $v) {
    $list[$k] += $min_bean;
  }
  return $list;
}

Le deuxième type est une simple expansion. Le montant maximum de chaque enveloppe rouge est de : (montant restant/nombre de. enveloppes rouges restantes)*3 mais il est nécessaire d'envoyer au moins 2 enveloppes rouges à chaque fois

Le troisième type, méthode de segment de ligne, génère aléatoirement plusieurs nombres, divise une ligne droite en plusieurs segments, et la longueur de chaque segment (cette fluctuation est relativement importante, pas très moyenne, si la taille de chaque enveloppe rouge est limitée, ce sera plus gênant)


Le quatrième type

 :
function abc ($total_bean, $total_packet)
{
  $min = 1;
  $max = $total_bean -1;
  $list = [];
  $maxLength = $total_packet - 1;
  while(count($list) < $maxLength) {
    $rand = mt_rand($min, $max);
    empty($list[$rand]) && ($list[$rand] = $rand);
  }
  $list[0] = 0; //第一个
  $list[$total_bean] = $total_bean; //最后一个
  sort($list); //不再保留索引
  $beans = [];
  for ($j=1; $j<=$total_packet; $j++) {
    $beans[] = $list[$j] - $list[$j-1];
  }
  // return $beans;
  echo &#39;<pre class="brush:php;toolbar:false">&#39;; print_r($beans); echo array_sum($beans);
}
abc(100000, 3);

Parce que chaque personne possède au moins 1 haricot, il est généré aléatoirement à chaque fois. Lors du comptage des haricots, réservez le nombre de haricots restant * 1 haricot Après avoir supprimé ces numéros de haricots restants nécessaires, utilisez la moyenne des numéros de haricots restants comme maximum pour générer de manière aléatoire le numéro de haricot actuel

Recommandations associées :

Explication détaillée de la façon dont PHP implémente des enveloppes rouges fixes et des algorithmes d'enveloppe rouge aléatoires (photo)


PHP génère un algorithme d'enveloppe rouge aléatoire

Générer un nombre spécifié d'enveloppes rouges 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!

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