求大神指导?

WBOY
Freigeben: 2016-06-13 12:15:27
Original
875 Leute haben es durchsucht

求大神指点????
一个抽奖的需求:
一等奖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 />
Nach dem Login kopieren
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 />
Nach dem Login kopieren

实用时,你需要保存奖池的变化,以供下一次抽奖使用
------解决思路----------------------
如果是我...把用户或者抽奖码放进数据库,在后面加一个字段“中奖状态”,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 />
Nach dem Login kopieren
可能的结果
Array<br />(<br />    [3] => 5955<br />    [2] => 3059<br />    [1] => 986<br />)<br />
Nach dem Login kopieren

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage