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 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
php变量范围介绍
Oct 15 PHP
CodeIgniter使用phpcms模板引擎
Nov 12 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
Jun 07 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
PHP实现的AES 128位加密算法示例
Sep 16 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
PHP实现文件上传与下载
Aug 28 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
php 分页类 扩展代码
2009/06/11 PHP
php中文验证码实现示例分享
2014/01/12 PHP
php中序列化与反序列化详解
2017/02/13 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
JS与框架页的操作代码
2010/01/17 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
js实现图片360度旋转
2017/01/22 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
js的对象与函数详解
2019/01/21 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
django中静态文件配置static的方法
2018/05/20 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
教师实习自我鉴定
2013/12/11 职场文书
合作协议书模板2014
2014/09/26 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
JS函数式编程实现XDM一
2022/06/16 Javascript