1. php 抽奖代码,100分奖励
中奖概率是40%
<?php
/**
* 抽奖
* @param int $total
*/
function getReward($total=1000)
{
$win1 = floor((40*$total)/100);
$other = $total-$win1;
$return = array();
for ($i=0;$i<$win1;$i++)
{
$return[] = 1;
}
for ($n=0;$n<$other;$n++)
{
$return[] = '未抽中奖品';
}
shuffle($return);
return $return[array_rand($return)];
}
$data = getReward();
echo $data;
?>
2. PHP抽奖系统怎样保存奖品名称
可以把奖品名称存到缓存中,建议使用redis
3. jquery+php抽奖系统如何控制某个奖品只能被抽中一次
一般来说,PHP在服务端执行的时候就已经计算出中奖结果,输出后jQuery只是象征性的做个效果出来(当然也可以用js来计算中奖结果并通过ajax把结果传回服务器,不过这个开发难度大于前者,这么做纯属太闲了)。
以上这段文字不重要。重点在下面。
记录每次中奖结果,并在每次计算中奖结果的时候匹配以前记录的结果,有匹配的,就再计算一次,一直到没有匹配的为止。
4. php怎么实现抢票功能
对于抢票、秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案:
方案一:使用队列来实现
可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧
比 如有100张票可供用户抢,那么就可以把这100张票放到缓存中,读写时不要加锁。 当并发量大的时候,可能有500人左右抢票成功,这样对于500后面的请求可以直接转到活动结束的静态页面。进去的500个人中有400个人是不可能获得 商品的。所以可以根据进入队列的先后顺序只能前100个人购买成功。后面400个人就直接转到活动结束页面。当然进去500个人只是举个例子,至于多少可 以自己调整。而活动结束页面一定要用静态页面,不要用数据库。这样就减轻了数据库的压力。
方案二:当有多台服务器时,可以采用分流的形式实现
假设有m张票, 有n台产品服务器接收请求,有x个请求路由服务器随机转发
直接给每台产品服务器分配 m/n张票
每台产品服务器内存做计数器,比如允许m/n*(1+0.1)个人进来。
当内存计数器已满:
后面进的人, 直接跳到到转到活动结束的静态页面,
通知路由服务器,不在路由到这台服务器(这个值得商讨)。
所有产品服务器进御孝让来的m/n*(1+0.1)个人再全部转发到一台付款服务器上,进入付款环节,看谁手快了,这时候人少,加锁什么的就简单的。
方案三、如果是单服务器,可以使用Memcache锁来实现
proct_key 为票的key
proct_lock_key 为票锁key
当proct_key存在于memcached中时,所有用户都可以进入下单流程。
当进入支付流程时,首先往memcached存放add(proct_lock_key, “1″),
如果返回成功,进入支付流程。
如果不成,则说明已经有人进入支付流程,则线程等待N秒,递归执行add操作。
我通过你的问题,想象了一下你的环境。
可能是 有100个票。 10万人抢。
你可以在服务器上做一个消息列队。不论多少人抢票,都先放入消息列队中。这样,我们就把高并发,变成了统一的单线程。
这时候一切都好办了。优点是缓解了MYSQL的瞬时压力
但缺点是,如果1秒内1万人点击抢票。有可能会造镇局成瞬时用户访问困难。(因为大家都在列队)
如果你觉得慢了几百毫秒不能忍,那你就需要换一个做法:
做一个竞争锁,防止多个用户同时获取一张票。(票在MYSQL中)
在内存中存入一个标签,来确定是否还有票。
当内存标签说:没有票了。 剩下的用户一律歇菜。
这样的优点是不论MYSQL,还是用户,都很轻慎轿松。
缺点是,稍微有点小麻烦。 看你具体需求了。
5. 如何用PHP制作有奖品(数量)的转盘抽奖
这个不是有key值么,抽到后把这个key值的给unset()
unset() 方法
注意如果你使用 unset() 方法,它是不会改变其他的键(key),如果你想对其他的键(key)重新整理排序,可以使用 array_values()。
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");unset($array[1]);
//↑ 你要删除的数组元素值的键print_r($array);?>
输出结果:
Array (
[0] => a [2] => c)
6. php 抽奖活动每天只有三次机会是怎么实现!求思路,求代码,
记录下当前用户
当天抽奖次数
每次抽奖操作来判断这个用户的抽奖次数
,大于大于等于3
就不让他抽
就行了
7. php一个抽奖函数(自定义中奖项数和概率)
解决思路如下:
1)以数字区段来对应中奖情况例如有一、二、三等奖,各自的中奖概率分别为10%、20%、30%那么有如下划分:1-10,一等奖;11-30,二等奖;31-60,三等奖,60以上,未中奖
2)产生一个1~100之间的随机数,看随机数属于哪个奖项区域,以确定中奖情况
8. PHP抽奖问题,奖项id为1的一等奖,每天只能出现一次,该怎么实现;
保存 一等奖 和 抽奖时间。如果今天一等奖已经抽中了,就跳过。