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开发GUI
Oct 09 PHP
在IIS上安装PHP4.0正式版
Oct 09 PHP
经典的PHPer为什么被认为是草根?
Apr 02 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
php修改指定文件后缀的方法
Sep 11 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
功能强大的php分页函数
Jul 20 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
php实现商城购物车的思路和源码分析
Jul 23 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
PHP读取Excel类文件
2017/05/15 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
Python SQLite3数据库操作类分享
2014/06/10 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
民事授权委托书范文
2014/08/02 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
美容院管理规章制度
2015/08/05 职场文书
竞聘书的秘诀
2019/04/02 职场文书
2019秋季运动会口号
2019/06/25 职场文书
教你用python控制安卓手机
2021/05/13 Python
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL