Home  >  Article  >  Backend Development  >  Detailed explanation of php WeChat red envelope random generation algorithm

Detailed explanation of php WeChat red envelope random generation algorithm

墨辰丷
墨辰丷Original
2018-06-01 16:39:471775browse

This article mainly introduces the PHP version of WeChat red envelope random generation algorithm in detail. It has a certain reference value. Interested friends can refer to it.

Think about it and write PHP yourself. Can the WeChat red envelope random generation algorithm achieve similar functions (in fact, I dare not say it is an algorithm).
// $bonus_total Total amount of red envelopes
// $bonus_count Number of red envelopes
// $bonus_type Red envelope type 1=Spell Lucky red envelope 0 = ordinary red envelope

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, let’s experience it now

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

Another version implemented using arrays, the principle is similar:

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

Summary: The above is the entire article Content, I hope it will be helpful to everyone's study.

Related recommendations:

phpHow to combine redis to achieve high concurrency in posting and Weibo posts

PHP Ajax Detailed explanation of the case of detecting whether the network is normal

Detailed explanation of the SnowFlake algorithm for generating unique IDs in PHP

The above is the detailed content of Detailed explanation of php WeChat red envelope random generation algorithm. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn