Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierung der PHP-Funktion für zufällige rote Umschläge

Implementierung der PHP-Funktion für zufällige rote Umschläge

小云云
小云云Original
2018-01-26 13:45:261690Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn