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 快速生成 Flash 动画的方法
Mar 06 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
PHP数组操作汇总 php数组的使用技巧
Jul 17 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
Yii实现显示静态页的方法
Apr 25 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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 echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
php中执行系统命令的方法
2015/03/21 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
Yii框架安装简明教程
2020/05/15 PHP
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
python数组复制拷贝的实现方法
2015/06/09 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
判断网页编码的方法python版
2016/08/12 Python
python机器学习之贝叶斯分类
2018/03/26 Python
django2笔记之路由path语法的实现
2019/07/17 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
护士自荐信
2013/10/25 职场文书
公司授权委托书范本
2014/04/03 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
详细介绍python类及类的用法
2021/05/31 Python
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android
源码安装apache脚本部署过程详解
2022/09/23 Servers