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 相关文章推荐
10个实用的PHP代码片段
Sep 02 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
joomla数据库操作示例代码
Jan 06 PHP
PHP二维数组去重实例分析
Nov 18 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python的迭代器与生成器实例详解
2014/07/16 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
Python短信轰炸的代码
2020/03/25 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
教育技术学专业职业规划书
2014/03/03 职场文书
五分钟演讲稿
2014/04/30 职场文书
小学生倡议书范文
2014/05/13 职场文书
2014年生产部工作总结
2014/12/17 职场文书
应聘教师自荐信
2015/03/26 职场文书
四年级作文之植物
2019/09/20 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
教你用python控制安卓手机
2021/05/13 Python
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
详解java如何集成swagger组件
2021/06/21 Java/Android