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

php抽奖概率算法

高老师9年前 (2017-09-05)PHP2440
<?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性能优化

常见的PHP优化方法,让PHP效率更高,抽空更新(很多都是学习网络上的方法,想深度理解建议学C语言。):字符串的输出最好使用单引号,不要使用双银行,否则PHP会去找是否存在变量需要解析大数组,对象,资源句柄使用完及时进行unset()能用系统函数解决的问题尽量不要使用正则表达式,虽然正则表达式逼格高...

PHP函数赋值给一个变量的另类用法

PHP函数赋值给一个变量的另类用法

<?php   function  go($str) { echo'I\'m '.$str;  }   $goto='go';   $goto('gaojiufeng'...

php 数组转换xml,php 数组转成xml,php数组转xml 函数

php 数组转换xml,php 数组转成xml,php数组转xml 函数

源码:特别适用于微信支付中通知微信支付网关function array2xml($arr, $level = 1) { $s = $level == 1 ? "<xml&g...

packagist包发布稳定版

packagist包发布稳定版

自己的composer已经发布到packagist,但是无法使用composer require easy-task/easy-task来安装,只能在配置文件使用如下方式安装:"require": {     "easy...

php端口复用,php socket端口复用

php端口复用,php socket端口复用

第一次听说端口复用是在mixphp最新版本中发现的,mixphp启动监听9501端口,现在作者说可以多开几个进程来执行mixphp,我心里想了下再启动不是会端口冲突嘛,但是却没有问题,于是下载mixphp的源码解读,原来是启动http服务器使用new Co\Http\Server('0.0....

php elasticsearch基础使用

php elasticsearch基础使用

elasticsearch的操作都是基于http协议的,已经有现成的php类库,composer安装即可。{     "require": {        &...