Home > Backend Development > PHP Tutorial > 求大神指导?

求大神指导?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-13 12:15:27
Original
913 people have browsed it

求大神指点????
一个抽奖的需求:
一等奖1000个,二等奖30万个,三等奖30万个。如何快速的随机抛出一个奖品?我用了数组,把奖品放到数组里面,然后随机抛出一个,这种方式感觉有点慢,需要1到2秒的时间才能得到一个奖品。有没有别的方法,求大神指点?
------解决思路----------------------
测试例

$ar = array(1 => 1000, 2 => 300000, 3 => 300000); //奖池<br />while(array_sum($ar)) {<br />  $n = get_rand($ar); //得到奖项级别,可打印出来看看分布情况<br />  @$res[$n]++;<br />}<br />print_r($res);//看看中奖分布<br />print_r($ar); //看看奖池是否有剩余<br /><br />function get_rand(&$proArr) {<br />  $proSum = array_sum($proArr);<br />  $randNum = mt_rand(1, $proSum);<br />  foreach($proArr as $key => $proCur) {<br />    $proSum -= $proCur;<br />    if($randNum > $proSum) {<br />      $proArr[$key]--; //从奖池里扣除<br />      return $key;<br />    }<br />  }<br />}<br />
Copy after login
Array<br />(<br />    [2] => 300000<br />    [3] => 300000<br />    [1] => 1000<br />)<br />Array<br />(<br />    [1] => 0<br />    [2] => 0<br />    [3] => 0<br />)<br />
Copy after login

实用时,你需要保存奖池的变化,以供下一次抽奖使用
------解决思路----------------------
如果是我...把用户或者抽奖码放进数据库,在后面加一个字段“中奖状态”,0=没中,1=一等奖...
每次使用sql的随机语句抽出一个中奖状态为0的用户,然后更新即可
------解决思路----------------------
如果是按概率抽奖的
$ar = array(1 => 10, 2 => 30, 3 => 60); //中奖概率<br />for($i=0; $i<10000; $i++) { //抽奖1万次<br />  $n = get_rand($ar); //得到奖项级别,可打印出来看看分布情况<br />  @$res[$n]++;<br />}<br />print_r($res);//看看中奖分布<br /><br />function get_rand(&$proArr) {<br />  $proSum = array_sum($proArr);<br />  $randNum = mt_rand(1, $proSum);<br />  foreach($proArr as $key => $proCur) {<br />    $proSum -= $proCur;<br />    if($randNum > $proSum) {<br />      //$proArr[$key]--; //从奖池里扣除 因为是概率抽奖,这一句就不要了<br />      return $key;<br />    }<br />  }<br />}<br />
Copy after login
可能的结果
Array<br />(<br />    [3] => 5955<br />    [2] => 3059<br />    [1] => 986<br />)<br />
Copy after login

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template