易群互联 潜水
  • 1发帖数
  • 1主题数
  • 0关注数
  • 0粉丝
开启左侧

PHP:简朴实现一个抽奖函数,可包管千分一的中奖概率

[复制链接]
易群互联 发表于 2021-9-23 19:41:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
周年庆活动时,应活动促销要求,要实现下单可获得一个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);}方法很简单,高手略过吧,适合新手学习,已每一行都添加解释了。盼望能对你有所资助。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城