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 '<pre class="brush:php;toolbar:false">'; 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!