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的一等獎,每天只能出現一次,該怎麼實現;
保存 一等獎 和 抽獎時間。如果今天一等獎已經抽中了,就跳過。