PHP隨機紅包演算法詳解

來源:互聯網
上載者:User
這篇文章主要介紹了PHP實現的隨機紅包演算法,結合執行個體形式分析了php隨機紅包演算法的原理、實現方法與相關注意事項,需要的朋友可以參考下

具體如下:

一、整體設計

演算法有很多種, 可以自行選擇, 主要的"架構" 是這樣的, 用redis decr()命令去限流, 用mysql去記錄各種需要的資料

二、紅包演算法

簡便起見, 紅包金額用整數表示, 假設每個紅包裡邊有x個糖豆, 每個人最少一個豆

第一種: 每個紅包的最大金額是: (剩餘金額/剩餘紅包數)*2, 需要開始的時候預先分配給每個人一個豆


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;}


多次統計

第二種, 對其簡單擴充一下, 每個紅包的最大金額是: (剩餘金額/剩餘紅包數)*3; 但是要求每次最少發2個紅包

第三種, 線段法, 隨機產生幾個數字, 將一個直線分成幾段, 每段的長度(這個波動比較大, 不是很平均, 如果限制了每個紅包的大小, 會比較麻煩)


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>'; print_r($beans); echo array_sum($beans);}abc(100000, 3);


第四種:

因為每人最少1個豆, 那麼每次隨機產生豆數的時候要預留 剩餘人數*1個豆;

去掉這些必須剩餘的豆數後, 以剩下的豆數的平均值為最大值進行隨機產生本次豆數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.