Heim  >  Artikel  >  Backend-Entwicklung  >  WeChat-Beispiel für den Red-Envelope-Zufallsgenerierungsalgorithmus PHP-Version_php

WeChat-Beispiel für den Red-Envelope-Zufallsgenerierungsalgorithmus PHP-Version_php

WBOY
WBOYOriginal
2016-08-04 08:56:451277Durchsuche

Ich habe eine Weile darüber nachgedacht und mich gefragt, ob ich eine PHP-Version des WeChat-Algorithmus zur Zufallsgenerierung mit roten Umschlägen schreiben könnte, um ähnliche Funktionen zu erreichen (eigentlich wage ich nicht zu sagen, dass es sich um einen Algorithmus handelt).
// $bonus_total Gesamtbetrag des roten Umschlags
// $bonus_count Anzahl der roten Umschläge
// $bonus_type Roter Umschlagtyp 1 = roter Glücksumschlag 0 = gewöhnlicher roter Umschlag

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&#63;(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 mithilfe von Arrays implementiert ist, 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&#63;$avg:($total-array_sum($items));
      $i++;
    }
  }
  return $items;
}

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich sein wird. Ich hoffe auch, dass jeder Script House unterstützt.

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