温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

红包算法的一种实现(PHP)

发布时间:2020-10-21 12:37:55 来源:网络 阅读:388 作者:li_feng_liu 栏目:web开发

        前段时间有个项目需要用到红包算法,本以为简单,细想之下有点复杂。于是就百度了一下,没想到查出了不少,有些写的很复杂。由于时间有点紧,我就找了一个简单点的。然后参考着写一个。参考的地址是:https://blog.csdn.net/gorgle/article/details/52954413;

       这个地址中的红包是用java写的。根据其原理,我用PHP写了一遍,并且改进了点。他的算法中没有加每个红包最大最小值限制。我用PHP写的时候加上去了。代码如下:

<?php

/*
$total_money:红包总金额
$total_people:总人数/总分数
$min_money:每份红包的最小金额
$max_money:每份红包的最大金额
*/
function redpack($total_money,$total_people,$min_money,$max_money){

   $ret=array();
   $new_ret=array();
   
   $total_real_money=$total_money-$total_people*$min_money;

   $ret[0]=0;
   for($i=1;$i<$total_people;$i++){
       
     $ret[$i]=get_rand($ret[$i-1],$total_real_money,($max_money-$min_money));
     
      
   }

 sort($ret);

for($j=0;$j<count($ret);$j++){

if($j==count($ret)-1){
$new_ret[count($ret)-1]=$total_real_money-$ret[count($ret)-1]+$min_money;
}else{

    
$new_ret[]=$ret[$j+1]-$ret[$j]+$min_money;
}
}


shuffle($new_ret);
  return $new_ret;

}


function get_rand($start,$end,$max){
    $tmp=rand($start,$end);
    $total_max=$start+$max;
    
    if($tmp>($total_max) || empty($tmp)){
        return get_rand($start,$end,$max);
    }else{
        return $tmp;
    }
    
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI