各種抽獎活動開發總結及分析

在全部活動總,抽獎活動佔的比例是很是大的,現對已開發過的抽獎活動進行一個總結分析及評比思考php

抽獎活動在整理上能夠分爲如下幾種類型:前端

  1. 不限制人數,不設置獎品數量上限,只設置中獎機率
  2. 不限制人數,設置獎品數量上限,設置中獎機率
  3. 不限制人數,設置部分獎品數量上限部分沒有上線,設置中獎機率
  4. 限制人數,人人中獎,設置中獎機率
  5. 限制人數,設置獎品數量上限,設置中獎機率
  6. 限制人數,設置部分獎品數量部分不設置數量上限,設置中獎機率

先解決機率設置問題

在整個抽獎程序中,機率的設置是相當重要的,那麼設置機率有哪些方法呢算法

  1. 方法1:經過隨機數獲取機率,使用到的PHP函數有: rand 這種方法是不能控制中獎機率的,也就是隨機的機率
  2. 方法2:經過事先設置好的中獎機率數組來隨機從數組中抽取一個值來做爲得到的獎品等級,使用到的PHP函數有: array_rand array_merge array_fill 這種方法是能夠控制中獎的機率,可是每一次的中獎機率都是同一個概率的
  3. 方法3:經過網絡上的經典算法來實現中獎機率

再解決獎品數量的問題

每一次中獎後,在有數量限制的獎品中都須要減小,這種數量的減小就須要寫入緩存或者數據庫中了數據庫

一旦獎品數量爲0就須要降級處理或者設置爲必中的獎品或者設置爲未中獎後端

固然,每個中獎記錄咱們都須要保存到數據庫中數組

舉例說明

不限制人數,不設置獎品數量上限,只設置中獎機率

這種通常是虛擬類獎品的贈送,例如紅包、積分等緩存

獎品 數量 機率 獲獎等級
5元現金紅包 不限制 40% 4
10元現金紅包 不限制 30% 3
20元現金紅包 不限制 20% 2
50元現金紅包 不限制 10% 1

這種抽獎活動的實現就可使用方法2和方法3啦,先獲取機率,再記錄並寫入數據庫,返回中獎結果網絡

不限制人數,設置獎品數量上限,設置中獎機率

這種通常是實物類的獎品抽獎,會有未中獎選項存在的iphone

獎品 數量 機率 獲獎等級
小米充電器 40 40% 4
電烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

這種抽獎活動的實現思路就是在獎品出來後判斷一次獎品是否發送完成,若是發送完成則提示未中獎函數

不限制人數,設置部分獎品數量上限部分沒有上線,設置中獎機率

這種通常是有實物和虛擬結合的,也有是純實物的,只是有一款實物的成本很低很低

獎品 數量 機率 獲獎等級
5元現金紅包 不限制 40% 4
電烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

這種抽獎活動的實現思路就是在獎品出來後判斷一次獎品是否發送完成,若是發送完成則將中獎的等級更新爲必中的獎品便可

限制人數,人人中獎,設置中獎機率

這種通常是現場活動下的抽獎遊戲,人人蔘與人人中獎,數量很少

獎品 數量 機率 獲獎等級
小米充電器 不限制 40% 4
電烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

這種活動的實現思路是: 一次將獎品寫入到緩存或者數據庫中,每次讀取一條數據並更改狀態

限制人數,設置獎品數量上限,設置中獎機率

這種通常是出如今現場和線上的指定人數參與的抽獎活動

獎品 數量 機率 獲獎等級
小米充電器 不限制 40% 4
電烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

這種活動的實現思路是: 一次將獎品寫入到緩存或者數據庫中,每次讀取一條數據並更改狀態,而且要寫入未中獎的數據

限制人數,設置部分獎品數量部分不設置數量上限,設置中獎機率

這種就至關因而必中啦,只是必中的必定是不設置上限的獎品

獎品 數量 機率 獲獎等級
小米充電器 不限制 40% 4
電烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

這種活動的實現思路是: 在用戶抽獎時先判斷是不是否超過人數,再根據中獎機率來匹配,若是獎品已經發送完,則強制更新爲必中獎項便可

注意:

  1. 在轉盤的開發過程當中,要設置一個timeout值,若是請求沒有及時返回要要求前端設置一個未中獎的值,最好是再向後臺回調請求一次,來解決後端響應緩慢的問題
  2. 指定時間點中獎的抽獎活動其實就是先判斷時間點和獎品是否已經發送出去,再來強制性的更改中獎的獎品等級,並寫入到數據庫
相關文章
相關標籤/搜索