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 301转向实现代码
Sep 18 PHP
php 字符串替换的方法
Jan 10 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
sae使用smarty模板的方法
Dec 17 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 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下的权限算法的实现
2007/04/28 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
Prototype Array对象 学习
2009/07/19 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
brook javascript框架介绍
2011/10/10 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
python从入门到精通(DAY 3)
2015/12/20 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python集合常见运算案例解析
2019/10/17 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
仓库管理专业个人自我评价范文
2013/11/11 职场文书
总经理工作职责范文
2014/03/14 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
倡议书作文
2015/01/19 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis