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

php抽奖概率算法

高老师8年前 (2017-09-05)PHP2379
<?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 经纬度转城市

通过经纬度转换为城市名称,并获得城市的编号,通常在全国类型的商城中比较通用。//经纬度转城市名称(返回城市id,城市名称) //$ak开发密钥,$lat纬度,$lng经度,$type返回数据类型 public function getCityName($ak,$lat,$lng)...

 php调用.net的dll文件,php调用.net dll

php调用.net的dll文件,php调用.net dll

本篇文章不是讲解如何用.net开发自己的dll然后PHP通过com调用。主要记录PHP官方支持的DOTNET 基本语法如下:$obj = new DOTNET("assembly", "classname")a...

php多进程,php多进程处理任务,php多进程应用场景

php多进程,php多进程处理任务,php多进程应用场景

php多进程应用场景主要是非web端,fpm下是不支持多进程的,非类linux操作系统都不支持,请在cli模式使用.可以使用多进程做任务分发,批量计算,批量文件处理,批量爬虫,网络运维等等。下面看一份简单的入门demo//创建子进程 $pid=pcntl_fork(); //返回-1,创建失败,不...

pcntl_signal(): Error assigning signal

pcntl_signal(): Error assigning signal

当我想在一个进程中监听kill 和 kill -9命令报了这个错误。//监听kill pcntl_signal(SIGTERM, function () {     posix_kill(0, SIGTERM); });...

php管道通信

php管道通信

(1).管道是干嘛的?管道是用于进程之间通信的,传播或交换信息(2).管道有几种?(2.1).匿名管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。通常是指父子进程关系。(2.2).高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中...

php event异常处理,php set_exception_handler无效

php event异常处理,php set_exception_handler无效

(1).今天遇到一件奇怪的事情,在event事件中是无法自定义异常处理,例如我们使用set_exception_handler来统一处理异常。例如下面的代码:<?php error_reporting(E_ALL); set_error_handler(function ($errn...