Bootstrap

随机优惠券发放 金额越大 概率越小金额越小概率越大算法

/**
 * 金额越大 概率越小  金额越小概率越大  建议 min 和 max 的值不能相差  10以上,相差越大, 计算量越大越慢    
 * $pow 默认1.6 值越大 取值 1.1 到 2.0, 则分的越散 则 大金额概率越小 ,值越小  则 分的越密集 效果越差  运算越快  越大  运算量越大
 * @param int $min 最小金额
 * @param int $max 最大金额
 */
function rand_create_youhui($min,$max,$pow=1.6){
$indexArr = [];
$j=1;
for($i=$min;$i<=$max;$i++){
  $indexArr[]=['index'=>$j,'amount'=>$max+$min-$i];
  $j++;
}
  $amountArr = [];
  foreach ($indexArr as $key=>$v){
    for($i=1;$i<=intval(pow($pow,$v['index'])*$v['index']);$i++){
      $amountArr[]=$v['amount'];
    }
  }
 $amount =   $amountArr[rand(0,count($amountArr)-1)];
 return $amount;

}


在  $pow为  1.6  随机 1到10元的情况下, 随机 1000次结果:

1元   450个


2元242个



3元 146个


4元74个


5元 44个


6元 23个



7元12个



。。。


1 元 450 个

2元

;