PHP自定义概率的方法(原创)

php抽奖概率算法(适合大转盘等概率) <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内, * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间, * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。... 阅读详情

概述:

经历一周赶项目,终于项目上线之后就闲下来。突然今天回想起之前一次面试的有趣的面试题——“你处理转盘抽奖自定义概率有什么好的思路?”当年太年轻了,只是说到公倍数,含含糊糊的回答让面试官不太满意。如今,想起了,理清思路发现也不困难,在此分享一下做法。

准备:

主要的抽奖逻辑是抽取随机数来进行抽奖,同时用区间的不同来代表不同的奖项。该注释的地方都注释了,如果还是看不懂的读者可以私下问我。(注意:方法中echo出来的只是为了方便测试方法运行的过程来方便读者理解,自行修改删去就好。)

分析:

主要代码:

 /**
     * 修改自义定概率抽奖算法
     * @param $coupon_list = array('prize_name1' => 'probability1','prize_name2'=>'probability2','prize_name3'=>'probability3',……)
     * @return prize_name
     */
    public function lotter_test($coupon_list=array('a' => '1/3','b'=>'1/5','c'=>'1/8')) {
        //第一部分为处理输入的奖项概率数组
        foreach($coupon_list as $name=>$value){
            $exp = explode("/",$value);   //分隔分数
            $numerator[$name] = $exp[0];  //分子
            $denominator[$name] = $exp[1];  //分母
        }
        $common_multiple = 1; //初定义公倍数
        foreach($denominator as $value){
            $common_multiple *= $value;  //计算公倍数
        }
        foreach($denominator as $name=>$value){
            $new_list[$name] = $common_multiple/$value*$numerator[$name];//获得每一个奖项分别占公倍数的多少份
        }
        $count = array_sum($new_list); //补充其他情况(各奖项总概率为100%)
        $other = $common_multiple - $count;//得出数组中的其他情况占公倍数的多少份
        $new_list = array_merge($new_list,array('other' => $other)); //添加其他情况到数组中
        //第二部分为抽取随机数来进行抽奖
        $luck_num = mt_rand(0, $common_multiple);
        echo 'luck_num='. $luck_num;
        echo '</br>';
        $_counter = 0;
        foreach($new_list as $name => $value) {
            $_counter += $value;
            echo '$_counter='. $_counter;
            echo '$name='. $name;
            if ($luck_num <= $_counter) {
                return $name;
            }
            echo '</br>';
        }
    }

测试部分:

   public function  test11(){
        $arr =array('a'=>'1/9999','b'=>'1/888','c'=>'1/3');
        echo '</br>The result is ' . $this ->lotter_test($arr);
    }

测试返回的结果:

luck_num=7403940
$_counter=2664$name=a
$_counter=32661$name=b
$_counter=8911773$name=c
The result is c
PHP大转盘功能(后台设置概率)可二次开发 此代码为做项目过程中,写的例子,实际应用到项目中,只需加入自己的业务流程,以及中奖记录。即可。 ReadMe结构说明: index.php 抽奖前台视图 data.php 抽奖处理 lottery_list.php 抽奖程序后台列表 lottery_set.php 奖项设置页面 conn.php 数据库配置信息(常用自定义函数库) 立即下载

相关推荐

调用IP核、移植/复制IP核以及解决IP核被锁住/红锁问题(基于vivado)

解决不同工程IP核之间复制调用以及IP核红锁问题,让开发更简单!

weixin_44502554的博客 1万+

php实现概率的问题处理

废话不多说直接放代码:: // php实现概率 function randstr($arr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($arr); //概率数组循环 foreach ($arr as $key =&gt; $proC...

MR_paang的博客 1185

基于TDOA的chan算法(定位算法)

Chan算法原理 TDOA(TDOA,the time differences of arrival,到达时间差),Chan算法是TDOA定位方法的一个很好用的方法。 Chan算法是非递归双曲线方程组解法,具有解析表达式解,主要特点是:在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加已确定点的数量来提高算法精度。 该算法的推导前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。二维情况下,可分为只有三个点参与定

优快云不再更新 2万+

php 计算概率,可以任意添加

<?php //设置概率 $arr=array('a'=>30,'b'=>70);//概率方法 function gl($arr){ $total=array_sum($arr); $num=rand(1,$total); $jishu=0; foreach($arr as $key=>$o){ ...

weixin_30788239的博客 194

从零到一:RJ71EN71 ModbusTCP配置的避坑指南与实战技巧

本文详细解析三菱RJ71EN71模块的ModbusTCP配置全流程,涵盖GX Works3参数设置、地址映射、通信调试等核心环节。针对工业环境中常见的IP冲突、软元件分配错误、通信超时等高频问题提供实战解决方案,帮助工程师快速构建高可靠性通信网络,避免项目延期风险。

zzz56的博客 331

从AD到HFSS:Gerber文件驱动的PCB三维电磁仿真全流程解析

本文详细解析了从AD到HFSS的Gerber文件驱动的PCB三维电磁仿真全流程,重点介绍了Gerber文件作为桥梁的重要性、AD端Gerber文件导出实战指南、HFSS 3D Layout导入技巧及高级问题排查方法。通过实际案例和技巧分享,帮助工程师高效完成PCB电磁仿真,提升设计验证效率。

weixin_33735077的博客 260

php概率计算_php概率算法(转)

这是一个很经典的概率算法函数:function get_rand($proArr) {$result= '';//概率数组的总概率精度$proSum =array_sum($proArr);//概率数组循环foreach ($proArr as $key =>$proCur) {$randNum= mt_rand(1, $proSum); //抽取随机数if ($ra...

weixin_39820244的博客 441

scanpy单细胞转录组python教程(四):单样本数据分析之降维聚类及细胞注释

本文介绍了使用scanpy进行单细胞转录组分析的降维聚类和细胞注释流程。首先通过PCA降维并可视化主成分贡献,然后使用不同分辨率参数(0.2-1.0)进行Leiden聚类。通过Wilcoxon检验鉴定marker基因,并基于经典marker基因手动注释细胞类型。最后对低质量细胞群进行过滤,并重新计算邻居图和UMAP可视化。流程中包含PCA方差分析、多分辨率聚类比较、marker基因筛选和基于UMAP的细胞类型可视化等关键步骤,为后续分析奠定基础。

qq_42090739的博客 941

php概率计算_关于PHP随机概率计算函数的介绍

这篇文章主要介绍了关于PHP随机概率计算函数的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下在游戏开发中,会经常碰到计算概率的场景下面的代码就是一个最简单的根据给定概率计算出随机结果的实例...

weixin_39530833的博客 328

反序列化漏洞详解

目录 一、什么是序列化和反序列化 二、什么是反序列化漏洞 三、序列化函数(serialize) 四、反序列化(unserialize) ​五、什么是PHP魔术方法 六、一些常见的魔术方法 七、魔术方法的利用 八、反序列化漏洞的利用 1.__destruct()函数 2.__wakeup() 3.toString() ​九、反序列化漏洞的防御 一、什么是序列化和反序列化 序列化是将对象转换为字符串以便存储传输的一种方式。而反序列化恰好就是序列化的逆过程,反序列化会将字符串.

LJH1999ZN的博客 3万+

全新RT-DETR 有效涨点改进目录 | 包含各种卷积、主干改进、各种注意力机制、Neck特征融合改进、损失函数、AIFI创新改进、独家创新、小目标检测、特殊场景检测等最全大论文及小论文必备创新改进点

《全新最全RT-DETR涨点改进专栏》提供500+种创新改进方案,涵盖卷积、注意力机制、主干网络等模块优化,适用于PCB检测、工业缺陷检测等场景。专栏包含顶会论文改进点、数据集增强方法、热力图可视化等实用功能,帮助科研人员快速提升模型性能。提供完整环境配置指南(Python3.10+Pytorch2.5.1)和训练教程,支持不同版本RT-DETR模型。定期更新涨点策略,配套QQ答疑群免费指导,适合从入门到发论文全流程需求,特别推荐给目标检测领域的研究生和工程师。

Ai缝合怪、助力小伙伴高效发论文 3406

php 大转盘抽奖概率抽奖

//抽奖 public function action($params, &$msg = '') { $rate_list = $this->findWhere([]); $max = 0; foreach ($rate_list as $rate) { $max += $rate['rate...

上官hao的博客 419

树莓派 RP2350B 开发环境搭建

本文介绍了树莓派RP2350B开发环境的搭建过程。

张一西的博客 286

php抽奖概率算法

做网站类的有时会弄个活动什么的,来让用户参加,既吸引用户注册,又提高网站的用户活跃度。同时参加的用户会获得一定的奖品,有100%中奖的,也有按一定概率中奖的,大的比如中个ipad、iphone5,小的中个Q币什么的。那么我们在程序里必然会设计到算法,即按照一定的概率让用户获得奖品。先来看两个概率算法函数。 算法一 /** * 全概率计算 * * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4) * @return st

hechenhongbo的博客 1863

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

php概率计算_PHP几个常用的概率算法

算法一1 /**2 * 全概率计算3 *4 * @param array $p array('a'=>0.5,'b'=>0.2,'c'=>0.4)5 * @return string 返回上面数组的key6 */7 function random($ps){8 static $arr = array();9 $key = md5(serialize($ps));...

weixin_39626298的博客 1117

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

概率 php,PHP几个常用的概率算法

说明:全概率计算为统一设置一个中奖概率;单独概率计算则每个奖品分别可以设置一个中奖概率;算法一(全概率计算)此类中奖概率为所有奖项设置一个总的中奖概率,中奖后再从已有的奖品里面随机抽一个奖品中奖判断:1.先按照总体的抽奖概率判断该用户是否中奖2.如果中奖的话,则随机从所有奖品里面抽出一个3.所有奖品抽完后中奖概率变成0如:中奖概率为20%,一等奖1个,二等奖2个,三等奖3个;首先判断是否中奖,中奖...

weixin_39812039的博客 1626

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

php写彩票中奖代码,php实现自定义中奖项数和概率的抽奖函数示例

本文实例讲述了php实现自定义中奖项数和概率的抽奖函数。分享给大家供大家参考,具体如下:/** 一个抽奖类,精确到万分之一* 三个步骤:1.接受一个中奖概率数组;2.接受一个抽奖种子;3.返回中奖等级*/class Lottery {/** 中奖概率数组,自动判断奖项数目* 数组键值和为100,自动计算出不中奖的概率,若初始是超过100抛出一个错误*/protected $_rate = arra...

weixin_31419249的博客 1029

php ajax 概率 转盘,php+jquery实现转盘抽奖 概率可任意调

转盘抽奖,炫丽的一般是flash做的。不懂flash而又不需要那么炫丽,可以简单的通过jquery来实现。网上教程有很多,跟着做了一下,也贴出来吧。要实现转盘抽奖,有两个关键点,一是让转盘或指针转起来并控制停止角度,一是概率控制。对于转起来控制停止角度这个问题,网上各教程都是用的jqueryrotate这个jquery插件,兼容性好使用也简单,要我本人自己写也不知道怎么写好,还是拿来即可。对于概率...

weixin_32534943的博客 1980

php概率计算_PHP 真实概率计算(百分比随机分配)

其实随机这个东西,很多人都会做。在PHP中更是存在rand()随机函数,如果只是随机一个数当然不错。但是如果是要呈现出来具体的内容给人选择就是不一样了。当然这个在现在想来,呵呵其实也一样。现实rand()判断出来当前是否获奖,获奖内容是什么,再随机展示其它格子就好了,不过这样就不是游戏了。下面要介绍的这个程序就是,曾经研究的一个程序,好比抽奖活动,一百个箱子,都已经内置了奖品就看你的运气了。。。。...

weixin_39890629的博客 1135

php概率计算_php抽奖概率算法

方法一:function get_rand($proArr) {$result = array();foreach ($proArr as $key => $val) {$arr[$key] = $val['v'];}// 概率数组的总概率$proSum = array_sum($arr);asort($arr);// 概率数组循环foreach ($arr as $k => $v) ...

weixin_35006125的博客 1233

php随机抽奖及抽奖概率程序

php抽奖概率方法 $notice = '谢谢回顾'; $prizeList = [ 1=>10, //一等奖中奖概率10% 2=>50,//二等奖中奖概率50% 3=>20,//三等奖中奖概率20% 4=>20//四等奖中奖概率20% ] $prizeName = [ 1=>'一等奖', 2=>'二等奖', 3=>'三等奖', 4=>'四等奖', ]; //奖项的设置和概率可以手动设置化; $total = array_s...

han_cui的博客 3092

php概率计算_PHP指定概率算法

PHP指定概率算法,可用于刮刮卡,大转盘等抽奖算法。假设:有一个二维数组,记录了所有本次抽奖的奖项信息:$test_arr =array('a'=>20,'b'=>30,'c'=>50);a奖概率20%,b奖概率30%,c奖概率50%模拟函数执行过程:总概率精度为20+30+50=100第一次数组循环,$procur=20假设抽取的随机数rand(1,100),假设抽到$rand...

weixin_39987847的博客 304

php概率计算_php 中奖概率算法

上次项目中有个抽奖活动,中奖概率算法整理成一篇笔记/*** 中奖概率算法* v表示中奖概率,注意其中的v必须为整数,可以将对应的奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能体现概率的准确性。本例中v的总和为100,那么 特等奖 对应的中奖概率就是1%,如果v的总和是10000,那中奖概率就是万分之一。** $arr = array(array('id'=&g...

weixin_39533659的博客 658

PHP实现按概率抽奖

$prizeArr = array( '0' => array('id' => 1, 'prize' => '全英雄皮肤', 'v' => 1,'num'=>1), '1' => array('id' => 2, 'prize' => '单英雄皮肤', 'v' => 2,'num'=>2), ...

senyzy的博客 3260

PHP中奖概率算法-按概率值排序

header("Content-type: text/html; charset=utf-8"); $prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=>1), '1' => array('id'=>2,'prize'=>'数码相机','v'=>5), '2' => array('id'=>3,'prize'=>'音箱设备','

xmlife的专栏 2584

php概率计算_PHP实现抽奖概率算法

PHP实现抽奖概率算法导语:下面小编要给大家分享的是一个抽奖概率算法, 大家可以参考阅读,更多详情请关注应届毕业生考试网。/** 经典的概率算法,* $proArr是一个预先设置的数组,* 假设数组为:array(100,200,300,400),* 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,* 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,*...

weixin_39941859的博客 144
上一篇: php自义定对二维数组进行排序
下一篇: 浅析PHP7新功能及语法变化总结(转载)
Tim_PHPer
博客等级 码龄11年 227粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值