首页 PHP 库 其它类库 中奖概率算法的php函数类
中奖概率算法的php函数类
<?php
function get_rand($proArr) {
    $result = '';
    //概率数组的总概率精度
    $proSum = array_sum($proArr);
    //概率数组循环
    foreach ($proArr as $key => $proCur) {
        $randNum = mt_rand(1, $proSum);
        if ($randNum <= $proCur) {
            $result = $key;
            break;
        } else {
            $proSum -= $proCur;
        }
    }
    unset ($proArr);
    return $result;
}

奖项数组是一个二维数组,记录了所有本次抽奖的奖项信息,其中id表示中奖等级,prize表示奖品,v表示中奖概率。注意其中的v必须为整数,你可以将对应的 奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能体现概率的准确性。本例中v的总和为100,那么平板电脑对应的 中奖概率就是1%,如果v的总和是10000,那中奖概率就是万分之一了。$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样 筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。这个算法简单,而且效率非常 高,关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。


免责声明

本站所有资源均由网友贡献或各大下载网站转载。请自行检查软件的完整性!本站所有资源仅供学习参考。请不要将它们用于商业目的。否则,一切后果由您负责!如有侵权,请联系我们删除。联系方式:admin@php.cn

相关文章

在Go中实现功能以删除从分类的切片中删除重复元素。 (通过分类数据的效率和算法设计侧重于效率和算法设计) 在Go中实现功能以删除从分类的切片中删除重复元素。 (通过分类数据的效率和算法设计侧重于效率和算法设计)

22 May 2025

本文讨论了使用两分球技术从排序切片中删除重复项的有效GO功能,强调算法设计和性能。WordCount:159

如何使用自连接从自引用表中检索数据? 如何使用自连接从自引用表中检索数据?

13 Jan 2025

了解 SELF JOIN 及其应用程序在数据库管理领域中,SELF JOIN 是一种特殊类型的联接操作,它允许...

在 Joomla 中连接第三方 PHP 库 在 Joomla 中连接第三方 PHP 库

28 Dec 2024

PHP 库很方便,因为可以从应用程序中的任何位置访问它们:从插件、组件模型、模块等。如果有人已经解决了类似的问题并将其设计为库(甚至更新了它),那就有意义了

Oracle 数据库现在支持布尔数据类型吗? Oracle 数据库现在支持布尔数据类型吗?

12 Jan 2025

Oracle 数据库中布尔数据类型的可用性与其他 RDBMS(例如提供 BIT 数据类型的 Microsoft SQL Server)不同,Oracle 数据库...

三个班级装载机是什么? 三个班级装载机是什么?

02 Jul 2025

Java中的三个主要类加载器是BootstrapClassLoader、ExtensionClassLoader和ApplicationClassLoader,它们构成了双亲委派模型。1.BootstrapClassLoader是最顶层的类加载器,由C/C 实现,负责加载Java核心类库(如rt.jar),位于jre/lib目录下,用户无法直接访问;2.ExtensionClassLoader是其子类加载器,负责加载jre/lib/ext路径下的扩展类库,可通过ClassLoader.getS

oracle数据库中常用的段有哪些 oracle数据库中常用的段有哪些

04 Mar 2025

本文研究了Oracle数据库细分类型(数据,索引,回滚,临时),其性能含义和管理。 它强调根据工作量和数据特征选择适当的段类型,以提高最佳效率

See all articles