2022 PHP抽奖新方法,支持开启多通道抽取

Posted 哈尔滨洛弘科技有限公司

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022 PHP抽奖新方法,支持开启多通道抽取相关的知识,希望对你有一定的参考价值。

模拟下真实奖品盒抽取场景

抽奖盒中会放入N个小球,在里面选取几个小球做为中奖的小球。
抽取模式可以分为
抽到小球后将抽中的小球销毁
抽到小球后将抽中的小球放回继续参与抽奖
了解抽奖盒的模式后我们上代码

  //此处用的是自定义的缓存机制,大家如果用框架可以换成相应的缓存机制(thinkphp 可以换成 cache())
	 
	 $this->name='';
	 $this->probability=0;
	 $this->prize=1;
	 
  /**
     * @param $name /奖池名称
     * @param $probability /概率
     * @param $prize /奖品库 需要中奖的随机数 数组
     * @return $this
     * 创建奖池/重置已经存在的奖池
     */
    public function create_draw($probability = 1 / 1000, $name = 'draw', $prize = 1)
    
        $this->name=$name;
        $this->probability=$probability;
        $this->prize=is_array($prize) ? $prize : [$prize]);
        Init::cache()->has($name) ?: Init::cache()->set($name, []);
        return $this;
    
        /**
     * @param int $type 1 取出不放回 2取出放回
     * @param int $num 取出后放回的次数
     * @return bool|int
     * 执行抽奖
     */
    public function query_draw($type = 1, $num = 0)
    
        if ($this->probability == 0) return false;
        $cache = Init::cache();
        //拉取奖池数据
        $draw_data = $cache->get($this->name);
        //获取奖池总奖数
        $total = 1 / $this->probability;
        //随机抽取
        $key = rand(1, $total);
        if (!in_array($key, $this->prize)) return false;
        if ($type == 1 && !in_array($key, $draw_data)) return false;
        if ($type == 2 && $num > 0 && array_count_values($draw_data)[$key] >= $num) return false;
        array_push($draw_data, $key);
        $cache->set($this->name, $draw_data);
        return $key;
    
     /**
     * 获取奖池数据
     */
    public function get_draw_data($name = 'draw')
    
        return Init::cache()->get($name);
    
       /**
     * @param string $draw_name
     * @return bool
     * 清除抽奖缓存
     */
    public function undraw($draw_name = 'draw')
    
        return Init::cache()->delete($draw_name);
    

哈尔滨洛弘科技实战代码分享,喜欢的可以一起探讨哦

以上是关于2022 PHP抽奖新方法,支持开启多通道抽取的主要内容,如果未能解决你的问题,请参考以下文章

2022 PHP抽奖新方法,支持开启多通道抽取

分享一个PHP抽奖算法程序代码

使用jQuery+PHP+Mysql实现抽奖程序

WEB通用抽奖程序设计基础架构以及程序目标

php 概率问题一副扑克牌随机抽取,出现红色10次出3次,黑色10次出1次,大小王10次出1次,这个怎么做?

怎么用python写一个抽奖程序,是抽取图片或视频