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 相关文章推荐
删除无限级目录与文件代码共享
Jul 12 PHP
PHP 程序授权验证开发思路
Jul 09 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
PHP实现图片压缩
Sep 09 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 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
Destoon实现多表查询示例
2014/08/21 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
详解JS预解析原理
2020/06/16 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python_LDA实现方法详解
2017/10/25 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
linux面试题参考答案(7)
2012/10/29 面试题
基督教婚礼主持词
2014/03/14 职场文书
2014年信访工作总结
2014/11/17 职场文书
朋友聚会开场白
2015/06/01 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
用Python可视化新冠疫情数据
2022/01/18 Python