龙空技术网

PHP:简单实现一个抽奖函数,可保证千分一的中奖概率

I型糖人 37

前言:

现时大家对“php抽奖程序”大致比较重视,看官们都需要学习一些“php抽奖程序”的相关资讯。那么小编同时在网络上汇集了一些关于“php抽奖程序””的相关文章,希望我们能喜欢,看官们一起来学习一下吧!

周年庆活动时,应活动促销要求,要实现下单可获得一个3位数的抽奖号码,待特定时间(商品下架截单后)进行直播抽奖,抽出一份幸运大奖执行免单,假定:共1000个SKU,奖品也只有1份。

大家应该很清楚,这个需求很简单,如果不要求必中,不要求限制中的人数,那么,直接随机数(mt_rand)获取即可。但如果要求1000个号码不重复。则只需要一个简单的函数即可解决,废话不多说,以下是思路:

1、初次使用:range(000,999); 生成 如: array(0, ……, 999)的数组。

2、使用:shuffle 打乱上面的数组元素排序。

3、使用:array_pop 获取最后一个元素,同时删除该元素。

4、将剩余的有999个元素的写入(或更新)表或redis等缓存文件等待下次使用。

5、使用 sprintf("%03d", 第3步获得的元素) 给抽奖码补零。

以下是代码参考:

function getCode() {	$array = array(123, 456, 789, ……); // 此处要改成从数据表或redis等缓存文件中获取到的数组	// 如果没有获取到数组,执行生成	if (empty($array)) {		// 生成拥有0~999的的元素的一维数组		$array = range(000,999);		// 打乱数组元素排序		shuffle($array);	}	// 第1步 获取数组中最后一个元素	$a = array_pop($array);	// 第2步 更新到素或缓存	// 这里需添加上你们的函数。将array_pop后的array数组写入或更新到数据表或redis等缓存文件。	// 第3步 补零后return回业务	return sprintf("%03d", $a);}

方法很简单,高手略过吧,适合新手学习,已每一行都添加注释了。希望能对你有所帮助。

标签: #php抽奖程序 #php抽奖源码