Dieser Artikel stellt hauptsächlich den in PHP implementierten Random-Red-Envelope-Algorithmus vor. Er analysiert die Prinzipien, Implementierungsmethoden und zugehörigen Vorsichtsmaßnahmen in Form von Beispielen kann jedem helfen.
1. Gesamtdesign
Es gibt viele Arten von Algorithmen, die Sie selbst auswählen können. Verwenden Sie den Befehl redis decr( ), um den Strom zu begrenzen, verwenden Sie MySQL, um verschiedene erforderliche Daten aufzuzeichnen
2. Red-Envelope-Algorithmus
Nur so Der Einfachheit halber ist die Menge des roten Umschlags ein ganzzahliger Ausdruck, vorausgesetzt, dass jeder rote Umschlag *2 enthält. Es ist notwendig, jeder Person zu Beginn vorab eine Bohne zuzuweisen
Mehrere Statistiken
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; }
Der zweite Typ ist eine einfache Erweiterung. Der maximale Betrag jedes roten Umschlags beträgt: (verbleibender Betrag/Anzahl). verbleibende rote Umschläge)*3; es ist jedoch erforderlich, jedes Mal mindestens 2 rote Umschläge zu versenden
Der dritte Typ, Liniensegmentmethode, generiert zufällig mehrere Zahlen und teilt eine gerade Linie in mehrere Segmente und die Länge jedes Segments (diese Schwankung ist relativ groß, nicht sehr durchschnittlich, wenn die Größe jedes roten Umschlags begrenzt ist, wird es problematischer)
Der vierte Typ
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);
Da jede Person mindestens 1 Bohne hat, wird sie jedes Mal zufällig generiert. Beim Zählen der Bohnen wird die verbleibende Anzahl an Bohnen * 1 Bohne reserviert Nachdem Sie diese notwendigen verbleibenden Bohnenzahlen entfernt haben, verwenden Sie den Durchschnitt der verbleibenden Bohnenzahlen als Maximum, um die aktuelle Bohnenzahl zufällig zu generieren
Verwandte Empfehlungen:
Detaillierte Erklärung, wie PHP feste Red-Envelopes- und Random-Red-Envelope-Algorithmen implementiert (Bild)
PHP generiert einen Random-Red-Envelope-Algorithmus
Generieren Sie einen angegebene Anzahl zufälliger roter Umschläge
Das obige ist der detaillierte Inhalt vonImplementierung der PHP-Funktion für zufällige rote Umschläge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!