抢红包代码留存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了抢红包代码留存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2096字,纯文字阅读大概需要3分钟。
内容图文
![抢红包代码留存](/upload/InfoBanner/zyjiaocheng/1251/8b0bfa73ce8d4971b13f0bf347dd4044.jpg)
<?php
//phpinfo();
header("Content-type:text/html;charset=utf-8");
include ‘Mysql.class.php‘;
$redis = new Redis();
$redis->connect(‘127.0.0.1‘, 6379);
$user_id = $_GET[‘user_id‘]?$_GET[‘user_id‘]:1;
$money = $_GET[‘money‘];
$num = $_GET[‘num‘];
//创建红包 并进行拆包存入缓存
if($_GET[‘action‘] == "add"){
$data = hongbao($money,$num);
foreach ($data as $key => $value) {
$redis->lPush("hongbao".$user_id,$value);
}
echo "红包创建成功";
//抢包动作
}elseif($_GET[‘action‘] == "send"){
$count = $redis->Lsize("hongbao".$user_id);
$c_user_id = rand();
if($count>0 && $price = $redis->lPop("hongbao".$user_id)){
$mysql = new Mysql("localhost","root","root","qhb");
$data = array(
‘user_id‘=>$c_user_id,
‘price‘=>$price,
);
$mysql->insert("hongbao",$data);
// file_put_contents("./data/hongbao.log", "\r\n抢到红包:金额为:".$data[‘price‘]."userid:".$data[‘user_id‘],FILE_APPEND);
}else{
// file_put_contents("./data/hongbao.log", "\r\n没有抢到红包,userid:".$c_user_id,FILE_APPEND);
}
}
/**
* 红包生成算法
* @param $money 总金额
* @param $number 红包数量
* @param $ratio 浮动系数
*/
function hongbao($money,$number,$ratio = 0.5){
$res = array(); //结果数组
$min = ($money / $number) * (1 - $ratio); //最小值
$max = ($money / $number) * (1 + $ratio); //最大值
/*--- 第一步:分配低保 ---*/
for($i=0;$i<$number;$i++){
$res[$i] = $min;
}
$money = $money - $min * $number;
/*--- 第二步:随机分配 ---*/
$randRatio = 100;
$randMax = ($max - $min) * $randRatio;
for($i=0;$i<$number;$i++){
//随机分钱
$randRes = mt_rand(0,$randMax);
$randRes = $randRes / $randRatio;
if($money >= $randRes){ //余额充足
$res[$i] += $randRes;
$money -= $randRes;
}
elseif($money > 0){ //余额不足
$res[$i] += $money;
$money -= $money;
}
else{ //没有余额
break;
}
}
/*--- 第三步:平均分配上一步剩余 ---*/
if($money > 0){
$avg = $money / $number;
for($i=0;$i<$number;$i++){
$res[$i] += $avg;
}
$money = 0;
}
/*--- 第四步:打乱顺序 ---*/
shuffle($res);
/*--- 第五步:格式化金额(可选) ---*/
foreach($res as $k=>$v){
//两位小数,不四舍五入
preg_match(‘/^\d+(\.\d{1,2})?/‘,$v,$match);
$match[0] = number_format($match[0],2);
$res[$k] = $match[0];
}
return $res;
}
?>
原文:http://www.cnblogs.com/ylcms/p/7345081.html
内容总结
以上是互联网集市为您收集整理的抢红包代码留存全部内容,希望文章能够帮你解决抢红包代码留存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。