最近因项目需求需要做一个抽奖类的应用,用户点击抽奖,会返回三种不同的结果(即奖项:一等奖,二等奖,三等奖,谢谢抽奖),很显然,这个奖值出现的概率要依次降低了。这就涉及到了一个类似权重计算的一个算法了。根据需求想了很久,也总算是通过一个简单的权重计算办法将这件事情搞定了,概率还是在预计范围之内的。
下面就将这个权重计算的方法概述下。
首先说明的是这个例子在这里仅适合二维数组且一维为数字索引的数组,数据数组结构如下:
$data=array(
0=>array('id'=>1,'name'=>'一等奖','weight'=>'5'),
1=>array('id'=>2,'name'=>'二等奖','weight'=>'10'),
2=>array('id'=>3,'name'=>'三等奖','weight'=>'25'),
3=>array('id'=>4,'name'=>'谢谢抽奖','weight'=>'60')
);下面是简单计算权重的算法
简介PHP轻论坛是一个简单易用的PHP论坛程序,适合小型社区和个人网站使用。v3.0版本是完全重构的版本,解决了之前版本中的所有已知问题,特别是MySQL保留字冲突问题。主要特点• 简单易用:简洁的界面,易于安装和使用• 响应式设计:适配各种设备,包括手机和平板• 安全可靠:避免使用MySQL保留字,防止SQL注入• 功能完善:支持分类、主题、回复、用户管理等基本功能• 易于扩展:模块化设计,便于
21
// 权重数值越高,被返回的概率越大
// author www.Alixixi.com
function countWeight($data){
$weight=0;
$temp=array();
foreach($data as $v){
$weight+=$v['weight'];
for($i=0;$i<$v['weight'];$i++){
$temp[]=$v;//放大数组
}
}
$int=mt_rand(0,$weight-1);//获取一个随机数
$result=$temp[$int];
return $result;
}计算结果返回如下:
立即学习“PHP免费学习笔记(深入)”;
Array
(
[id] => 4
[name] => 谢谢抽奖
[weight] => 60
)
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号