<?php //這裏的算法 這裏的機率不是100%,而是 pr/sum(pr) 如:一等獎的機率爲0.29% $prize = array(array('level' => 1, 'name' => "IPhone X", 'pr' => 1), array('level' => 2, 'name' => "小米電視4", 'pr' => 5), array('level' => 3, 'name' => "小米8", 'pr' => 10), array('level' => 4, 'name' => "小米掃地機", 'pr' => 20), array('level' => 5, 'name' => "充電寶", 'pr' => 300),); //因此 這裏也能夠變成獎品數量,而後抽掉一個 減去一個也可的 不會發生超支的狀況,抽到充電寶越多,name抽到iphone x產生的機率就變大了。 //若是iphone x已抽取,那pr變成0 便可。 function getPrize($prize) { $arr = array(); foreach ($prize as $k => $v) { $arr[$v['level']] = $v['pr']; } $totalPr = array_sum($arr); foreach ($arr as $k => $v) { $randnum = mt_rand(1, $totalPr); if ($randnum <= $v) { $luck = $k; break; } else { $totalPr -= $v; } } return $luck; } for ($i = 0; $i < 10; $i++) { echo getPrize($prize); echo "\r\n"; }
這個是參考別人的,能夠結合具體產品數量,避免超額狀況php
參考地址:https://www.cnblogs.com/John727/p/4500095.htmlhtml