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边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
PHP set_time_limit(0)长连接的实现分析
Mar 02 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
详解 PHP加密解密字符串函数附源码下载
Dec 18 PHP
在IIS下安装PHP扩展的方法(超简单)
Apr 10 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
Dec 10 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中文分词 自动获取关键词介绍
2012/11/13 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
jquery select选中的一个小问题
2009/10/11 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
Python二分法搜索算法实例分析
2015/05/11 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
Python初学者常见错误详解
2019/07/02 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
详解Python实现进度条的4种方式
2020/01/15 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
党员创先争优活动总结
2014/05/04 职场文书
校园安全演讲稿
2014/05/09 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
求职自我评价范文100字
2014/09/23 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
python字符串的多行输出的实例详解
2021/06/08 Python
Python实现学生管理系统(面向对象版)
2021/06/24 Python
教你一步步实现一个简易promise
2021/11/02 Javascript