PHP实现的权重算法示例【可用于游戏根据权限来随机物品】


Posted in PHP onFebruary 15, 2019

本文实例讲述了PHP实现的权重算法。分享给大家供大家参考,具体如下:

假设有数据:

$data = array (
 array (
 'id' => 1,
 'name' => '张三',
 'weight' => 5
 ),
 array (
 'id' => 2,
 'name' => '王五',
 'weight' => 10
 ),
 array (
 'id' => 3,
 'name' => '李四',
 'weight' => 15
 ),
);

要随机取出其中一条,并且不是完全随机,而是根据其中weight的数值,按照数值越大,几率越高的规律取出。

以前写过一些权重算法,可是都不完美,要么数据量有限制,要么weight之和必须等于一个指定的数等等,都不完善。

今天突发奇想,写了一套完美的权重算法,该算法有如下优势:

1. 支持无限多个数据

2. weight值之和任意

3. 不存在两个weight值一样时无法平均分配的bug

算法如下:

$data = array (
 array (
 'id' => 1,
 'name' => '张三',
 'weight' => 5
 ),
 array (
 'id' => 2,
 'name' => '王五',
 'weight' => 10
 ),
 array (
 'id' => 3,
 'name' => '李四',
 'weight' => 15
 ),
);
$weight = 0;
$tempdata = array ();
foreach ($data as $one) {
 $weight += $one['weight'];
 for ($i = 0; $i < $one['weight']; $i++) {
 $tempdata[] = $one;
 }
}
$use = rand(0, $weight -1);
$one = $tempdata[$use];
var_dump($one);

运行结果:

array(3) {
  ["id"]=>
  int(2)
  ["name"]=>
  string(4) "王五"
  ["weight"]=>
  int(10)
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 学习资料零碎东西
Dec 04 PHP
PHP开发微信支付的代码分享
May 25 PHP
个人写的PHP验证码生成类分享
Aug 21 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
PHP下载文件的函数实例代码
May 18 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
php实现微信支付之退款功能
May 30 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 PHP
PHP Include文件实例讲解
Feb 15 #PHP
PHP XML Expat解析器知识点总结
Feb 15 #PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 #PHP
PHP fopen函数用法实例讲解
Feb 15 #PHP
PHP fclose函数用法总结
Feb 15 #PHP
PHP filesize函数用法浅析
Feb 15 #PHP
PHP数组遍历的几种常见方式总结
Feb 15 #PHP
You might like
Content-type 的说明
2006/10/09 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
php写的AES加密解密类分享
2014/06/20 PHP
js中indexof的用法详细解析
2013/12/24 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
微信小程序时间轴实现方法示例
2019/01/14 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
详解Python的Django框架中的通用视图
2015/05/04 Python
Python找出9个连续的空闲端口
2016/02/01 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
python的mysqldb安装步骤详解
2017/08/14 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
python框架flask表单实现详解
2019/11/04 Python
利用Python优雅的登录校园网
2020/10/21 Python
出纳的岗位职责
2013/11/09 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
公共场所标语
2014/06/30 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS