Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des PHP-WeChat-Algorithmus zur Zufallsgenerierung mit roten Umschlägen

Detaillierte Erläuterung des PHP-WeChat-Algorithmus zur Zufallsgenerierung mit roten Umschlägen

墨辰丷
墨辰丷Original
2018-06-01 16:39:471707Durchsuche

In diesem Artikel wird hauptsächlich die PHP-Version des WeChat-Algorithmus zur Zufallsgenerierung mit roten Umschlägen vorgestellt, die einen gewissen Referenzwert hat.

Denken Sie darüber nach und schreiben Sie es selbst in PHP Der WeChat-Algorithmus zur Zufallsgenerierung mit roten Umschlägen erreicht ähnliche Funktionen (tatsächlich wage ich nicht zu sagen, dass es sich um einen Algorithmus handelt).
// $bonus_total Gesamtbetrag der roten Umschläge
// $bonus_countAnzahl der roten Umschläge
// $bonus_type Typ der roten Umschläge 1 = Lucky Red Packet bekämpfen 0 = Gewöhnliches Red Packet

function randBonus($bonus_total=0, $bonus_count=3, $bonus_type=1){
  $bonus_items  = array(); // 将要瓜分的结果
  $bonus_balance = $bonus_total; // 每次分完之后的余额
  $bonus_avg   = number_format($bonus_total/$bonus_count, 2); // 平均每个红包多少钱
  $i       = 0;
  while($i<$bonus_count){
    if($i<$bonus_count-1){
      $rand      = $bonus_type?(rand(1, $bonus_balance*100-1)/100):$bonus_avg; // 根据红包类型计算当前红包的金额
      $bonus_items[] = $rand;
      $bonus_balance -= $rand;
    }else{
      $bonus_items[] = $bonus_balance; // 最后一个红包直接承包最后所有的金额,保证发出的总金额正确
    }
    $i++;
  }
  return $bonus_items;
}

Okay, lass es uns jetzt erleben

// 发3个拼手气红包,总金额是100元
$bonus_items  = randBonus(100, 3, 1);
// 查看生成的红包
var_dump($bonus_items);
// 校验总金额是不是正确,看看微信有没有坑我们的钱
var_dump(array_sum($bonus_items));

Eine andere Version, die mit Arrays implementiert wurde, das Prinzip ist ähnlich:

function sendRandBonus($total=0, $count=3, $type=1){
  if($type==1){
    $input     = range(0.01, $total, 0.01);
    if($count>1){
      $rand_keys = (array) array_rand($input, $count-1);
      $last    = 0;
      foreach($rand_keys as $i=>$key){
        $current  = $input[$key]-$last;
        $items[]  = $current;
        $last    = $input[$key];
      }
    }
    $items[]    = $total-array_sum($items);
  }else{
    $avg      = number_format($total/$count, 2);
    $i       = 0;
    while($i<$count){
      $items[]  = $i<$count-1?$avg:($total-array_sum($items));
      $i++;
    }
  }
  return $items;
}

Zusammenfassung: Das Obige ist das Ich hoffe, dass der Inhalt des gesamten Artikels für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

phpMethoden zur Kombination von Redis, um eine hohe Parallelität beim Posten und Weibo zu erreichen

Detaillierte Erläuterung des Falls, bei dem PHP+Ajax erkennt, ob das Netzwerk normal ist

Detaillierte Erläuterung des SnowFlake-Algorithmus für PHP zur Generierung eindeutiger IDs

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des PHP-WeChat-Algorithmus zur Zufallsgenerierung mit roten Umschlägen. 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