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木马攻击防御之道
Mar 24 PHP
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
PHP页面间参数传递的四种方法详解
Jun 09 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
May 14 PHP
Yii 框架入口脚本示例分析
May 19 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程序实现支持页面后退的两种方法
2008/06/30 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
Python备份Mysql脚本
2008/08/11 Python
python字符串替换的2种方法
2014/11/30 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
python scipy卷积运算的实现方法
2019/09/16 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
教育学专业毕业生的自我评价
2013/11/21 职场文书
商场中秋节广播稿
2014/01/17 职场文书
法人授权委托书
2014/04/03 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
2014年采购员工作总结
2014/11/18 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
nginx配置限速限流基于内置模块
2022/05/02 Servers
table不让td文字溢出操作方法
2022/12/24 HTML / CSS