当前位置:首页 > PHP > 正文内容

php抽奖概率算法

高老师8年前 (2017-09-05)PHP2297
<?php
/*
 *算法学习自百度.只是学习和记录
 */
header("Content-type:text/html;charset=utf-8");

//1.设置奖项,id是奖项id,name是中奖名称,v是中奖概率
$arr = array( 
			array('id' => 1, 'name' => '特等奖', 'v' => 1), 
			array('id' => 2, 'name' => '一等奖', 'v' => 10), 
			array('id' => 3, 'name' => '二等奖', 'v' => 10), 
			array('id' => 4, 'name' => '三等奖', 'v' => 10), 
			array('id' => 5, 'name' => '四等奖', 'v' => 20), 
			array('id' => 6, 'name' => '未中奖', 'v' => 50)
			);

//2.计算改路综合并抽奖
function getrand($pro) {
	$result = array();
	//循环奖项数组将原概率保存在新的数组
	foreach ($pro as $key => $value) {
		$arr[$key] = $value['v'];
	}
	asort($arr);
	//计算概率总数
	$prosum = array_sum($arr);
	//从刚才创建的概率数组循环
	foreach ($arr as $key => $value) {
		$randNum = mt_rand(1, $prosum);
		//生成一个随机数(1-总概率)
		//当前用户生成的随机数小于或者等于就是中奖
		if ($randNum <= $value) {
			$result = $pro[$key];
			break;
		}
		//当前用户生成的随机数大于奖项的概率,这个奖项错过.同时从总的概率中去除本奖项的概率
		else {
			$prosum -= $value;
		}
	}
	//返回中奖结果
	return $result;
}

//测试执行
$res = getrand($arr);
print_r($res);
?>

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/41.html

分享给朋友:

“php抽奖概率算法” 的相关文章

 PHP判断微信浏览器, PHP判断是否微信浏览器

PHP判断微信浏览器, PHP判断是否微信浏览器

获取浏览器信息原理是基于浏览器的UA信息,早在AsP时代就这样判断,但是腾讯总是喜欢自己折腾,不知道以后会修改成什么! 提取自人人商城官方自带的判断方法:function is_weiXin()  {    if (empty($_SERV...

PHP验证码不显示的终极解决方案

PHP验证码不显示的终极解决方案

PHP验证码不显示的问题应该是经常的事情,我在这里把2种解决方案都发出来方便大家后期使用.因为是昨天晚上自己写验证码都没有显示,我就直接把之前和李炎恢老师上课写的验证码拿来还是不显示,醉了。首先是第一种方法:1、打开服务器安装目录下的php.ini文件;2、去掉;extension=php_gd.d...

php多进程实现任务管理器,定时执行任务,支持守护

php多进程实现任务管理器,定时执行任务,支持守护

主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /**  * 订单任务  */ class Order {    &n...

cookie跨域,cookie p3p跨域

cookie跨域,cookie p3p跨域

最近在公司开发一个新的项目假设项目域名是a.com,需要接入b.com的单点登陆系统。(1).首先我们会在a.com的登陆页面用iframe引入b.com来显示登陆界面,实际上登陆验证操作都是在b.com上面(2).当b.com验证通过,会在前端ajax请求a.com的回调地址,这个回调地址目的就是...

php redis队列实现秒杀 , php用redis 实现秒杀功能

php redis队列实现秒杀 , php用redis 实现秒杀功能

为什么使用队列?因为pop取队列具有原子性。假如我们需要秒杀一个商品id,我们先将商品的库存保存到一个队列。例如:<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6...

php位运算符详解

php位运算符详解

文章篇幅较长,如果不喜欢看文章的,此处抛出韩顺丰老师的位运算视频,韩老师应该是全网讲php位运算符最详细的一个老师了。链接:https://pan.baidu.com/s/14xj7er8eVSUcJ-jYXyA0GA  提取码:731m 链接:https://pan.baidu.com...