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 学习提高路线分享
Oct 23 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
php自定义加密与解密程序实例
Dec 31 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
PHP生成器简单实例
May 13 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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中利用post传递字符串重定向的实现代码
2011/04/21 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
python开发入门——set的使用
2020/09/03 Python
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
大学生自荐信
2013/12/11 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
20年同学聚会感言
2014/02/03 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
大学生读书笔记大全
2015/07/01 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers