In diesem Artikel wird hauptsächlich der in PHP implementierte Random-Red-Envelope-Algorithmus vorgestellt und die Prinzipien, Implementierungsmethoden und zugehörigen Vorsichtsmaßnahmen des PHP-Random-Red-Envelope-Algorithmus anhand von Beispielen analysiert
wie folgt:
1. Gesamtdesign
Es gibt viele Arten von Algorithmen, die Sie selbst auswählen können. Architektur" ist wie folgt: Verwenden Sie den Befehl redis decr( ), um den Strom zu begrenzen, verwenden Sie MySQL, um verschiedene erforderliche Daten aufzuzeichnen
2. Red-Envelope-Algorithmus
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
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, einfach erweitern, das Maximum Die Anzahl der einzelnen roten Umschläge beträgt: (verbleibende Menge/Anzahl der verbleibenden roten Umschläge)*3; es müssen jedoch jedes Mal mindestens 2 rote Umschläge versendet werden
Der dritte Typ , Zeile Segmentmethode, generiert zufällig einige Zahlen, teilt eine gerade Linie in mehrere Segmente und bestimmt die Länge jedes Segments (diese Schwankung ist relativ groß, nicht sehr durchschnittlich, wenn sie eingeschränkt wird). Die Größe jedes roten Umschlags wird problematischer sein)
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);
Der vierte Typ
:
Weil jede Person jedes Mal mindestens 1 Bohne hat Die Anzahl der Bohnen wird zufällig generiert, die verbleibende Anzahl von Personen * 1 Bohne muss reserviert werden. Nachdem diese erforderlichen verbleibenden Bohnennummern entfernt wurden, wird die verbleibende Bohnenanzahl verwendet. Der Durchschnittswert ist der Maximalwert, der zufällig generiert werden soll Anzahl der Bohnen dieses Mal
Verwandte Empfehlungen:
Zufälliger roter Umschlag
von PHP implementierter AlgorithmusSo implementieren Sie feste rote Umschläge und
zufällige rote Umschläge
PHP-Generierung
Zufälliger roter Umschlag
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des PHP-Algorithmus für zufällige rote Umschläge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!