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 相关文章推荐
PHP4之真OO
Oct 09 PHP
将RTF格式的文件转成HTML并在网页中显示的代码
Oct 09 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
Jun 17 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
YII框架常用技巧总结
Apr 27 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
php获取用户浏览器版本的方法
2015/01/03 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
Node中使用ES6语法的基础教程
2018/01/05 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python编写一个优美的下载器
2018/04/15 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
python excel多行合并的方法
2020/12/09 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
护理毕业生自我鉴定
2014/02/11 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书