<?
function RandHBMake($hbqnum,$hbqmoney,$hbqlowmoney,$hbqmaxmoney,$hbqloc,$clist=''){
$hblist=array();
$takenum=0;
$leftmoney=$hbqmoney;
if($clist!=''){
$clist=str_replace(",",",",$clist);
if (strrpos($clist,",")>0) {
$cclist=explode(",",$clist);
for($k=0;$k<count($cclist);$k++){
if($cclist[$k]!=""){
$takenum+=1;
$okleftMoney=$leftmoney-(int)$cclist[$k];
$leftmoney=$okleftMoney;
$hblist[$takenum]=(int)$cclist[$k];
}
}
}else{
$takenum+=1;
$okleftMoney=$leftmoney-(int)$clist;
$leftmoney=$okleftMoney;
$hblist[$takenum]=(int)$clist;
}
}
$starti=$takenum+1;
for($i=$starti;$i<=$hbqnum;$i++){
list($okleftMoney,$okData)=GetHBMoney($i,$hbqnum,$hbqmoney,$leftmoney,$hbqlowmoney,$hbqmaxmoney,$hbqloc,$takenum);
if ($okData>0) {
$takenum+=1;
}
$leftmoney=$okleftMoney;
$hblist[$i]=$okData;
$okData1+=$okData;
}
shuffle($hblist);
return $hblist;
}
function GetHBMoney($nownum,$hbqnum,$hbqmoney,$leftmoney,$hbqlowmoney,$hbqmaxmoney,$hbqloc,$takenum){
$loc=($hbqloc-$takenum)-1;
$TmpMoney=rand($hbqlowmoney,$hbqmaxmoney);
$lasthbnum=$hbqnum-$nownum;
$lowlastmoney=$loc*$hbqlowmoney;
if ($TmpMoney==0) {
if($lasthbnum>$loc){
return Array($leftmoney,$TmpMoney);
}else{
$alrleftmoney=$leftmoney-$hbqlowmoney;
return Array($alrleftmoney,$hbqlowmoney);
}
}else{
if ($TmpMoney<$hbqlowmoney) {
$TmpMoney=$hbqlowmoney;
//$alrleftmoney=$leftmoney-$TmpMoney;
//return Array($alrleftmoney,$TmpMoney);
}
if($hbqloc==$takenum+1){
$alrleftmoney=0;
return Array($alrleftmoney,$leftmoney);
}
if($leftmoney>=$lowlastmoney&&$loc>=0){
$alrleftmoney=$leftmoney-$TmpMoney;
$newlowlastmoney=$lowlastmoney;
if($alrleftmoney>=$lowlastmoney){
return Array($alrleftmoney,$TmpMoney);
}else{
$TmpMoney=$leftmoney-$newlowlastmoney;
$alrleftmoney=$leftmoney-$TmpMoney;
return Array($alrleftmoney,$TmpMoney);
}
}elseif($loc<=0){
return Array($leftmoney,0);
}else{
$TmpMoney=$hbqlowmoney;
$alrleftmoney=$leftmoney-$TmpMoney;
return Array($alrleftmoney,$TmpMoney);
}
}
}
?>
调用方式:
<?
$hbqnum=100;//红包数量
$hbqmoney=10000;//红包总金额(分)
$hbqlowmoney=10;//最低可获取金额(分)
$hbqmaxmoney=200;//最高可获取金额(分)
$hbqloc=70;//必有金额的红包数量
$clist=“111,222,333”;//生成定额红包(分)
$HBMoneyList=RandHBMake($hbqnum,$hbqmoney,$hbqlowmoney,$hbqmaxmoney,$hbqloc,$clist);
print_r($HBMoneyList);
?>