php实现根据概率配置随机抽奖

简介: php实现根据概率配置随机抽奖
这是我写的一个比较简单的抽奖算法,并没有很严谨,用于我自己写的wap文字游戏(美味小镇)上的随机食材,可以设定概率值
<?php
/**
 * Created by PhpStorm.
 * User: tioncico
 * Date: 2017/12/9 0009
 * Time: 14:50
 */
class Rand
{
    public $arr,$not_id,$if_repeat,$odds;
    public function __construct($arr,$if_repeat=1)
    {
        $this->arr=$arr;
        $this->if_repeat=$if_repeat;
        $this->get_odds_array();
    }
    function action($num=1)
    {
        if(!$this->arr||!$this->odds){
            return false;
        }
        $ids = array();
        for ($i = 0; $i < $num; $i++) {
            $res = $this->get_rand($this->arr, $this->odds);
            if ($this->if_repeat == 0) {
                if(count($this->arr)<=count($ids)){
                    return $ids;
                }
                if (in_array($res, $ids)) {
                    $i--;
                } else {
                    $ids[] = $res;
                }
            } else {
                $ids[] = $res;
            }
        }
        return $ids;
    }
    public function get_odds_array($arr=array())
    {
        $arr||$arr = $this->arr;
        foreach ($arr as $k => $va) {
            if(empty($va['odds'])){
                $va['odds']=100;
            }
            $odds[$k] = $va['odds'];
        }
        $this->odds = array_sum($odds);
        return $this;
    }
    public function add_arr($arr=array()){
        $this->arr = array_merge($this->arr,$arr);
        return $this;
    }
    function remove_id($arr=array(),$not_id=array()){
        $arr||$arr = $this->arr;
        $not_id||$not_id = $this->not_id;
        if(empty($not_id)){
            $this->arr = $arr;
            return $this;
        }
        foreach($arr as$k=> $va){
            foreach($not_id as $vo){
                if($k==$vo){
                    unset($arr[$k]);
                }
            }
        }
        $this->arr = $arr;
        return $this;
    }
//返回概率
    function get_rand($arr=array(), $odds=0)
    {
        $arr||$arr = $this->arr;
        $odds||$odds = $this->odds;
        //概率数组循环
        $randNum = mt_rand(1, $odds);
        $odd_num = 0;
        foreach ($arr as $key => $va) {
            if ($randNum > $odd_num && $randNum <= $va['odds'] + $odd_num) {
                return $arr[$key];
                break;
            } else {
                $odd_num += $va['odds'];
            }
        }
        unset ($proArr);
    }
}
$arr=array(
    array(
       'id'=>1,
       'odds'=>100//相对概率值
    ),
    array(
       'id'=>2,
       'odds'=>10//相对概率值
    ),
    array(
       'id'=>3,
       'odds'=>200//相对概率值
    ),
)
调用方法 
$a = new Rand($arr);
$a->action(1);
目录
相关文章
|
7月前
|
关系型数据库 MySQL API
|
3月前
|
缓存 监控 网络协议
在配置 PHP-FPM 的 pool 时,常见的性能优化技巧
在配置 PHP-FPM 的 pool 时,常见的性能优化技巧
|
26天前
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
52 3
|
6月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
关系型数据库 MySQL PHP
php wampserver的使用配置
本文介绍了WampServer在Windows系统下的配置和使用方法,包括如何修改PHP时区为中国标准时区PRC、更改Apache服务器端口号以避免冲突、设置起始页以及如何创建和管理虚拟目录。通过这些步骤,用户可以更有效地在本地环境中开发和测试PHP程序。
php wampserver的使用配置
|
3月前
|
Unix PHP
PHP-FPM 配置
PHP-FPM 配置
|
3月前
|
IDE 安全 网络安全
Xdebug 在不同版本的 PHP 中配置方法有什么不同?
Xdebug 在不同版本的 PHP 中配置方法有什么不同?
212 4
|
3月前
|
监控 IDE PHP
php xdebug的配置、调试、跟踪、调优、分析
php xdebug的配置、调试、跟踪、调优、分析
|
2月前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
56 0
|
6月前
|
网络协议 Unix 应用服务中间件
PHP-FPM 性能配置优化
该文介绍了PHP-FPM的性能配置优化,包括其工作原理和与Nginx的配合。FastCGI是一种提高CGI效率的协议,PHP-FPM是它的管理器。文章对比了CGI和FastCGI的区别,指出FastCGI更高效,能处理更多请求。接着讨论了php-fpm的进程数调优,包括ondemand(按需创建)、dynamic(动态创建)和static(固定数量)三种模式,以及各自适用场景和参数配置。
145 0
PHP-FPM 性能配置优化