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 相关文章推荐
PHP5 安装方法
Jan 15 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
深入php常用函数的使用汇总
Jun 08 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
smarty内置函数capture用法分析
Jan 22 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
详解PHP用mb_string处理windows中文字符
May 26 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获取mysql字段名称和其它信息的例子
2014/04/14 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
基于python实现KNN分类算法
2020/04/23 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python opencv实现证件照换底功能
2019/08/19 Python
python 命名规范知识点汇总
2020/02/14 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
英语教师岗位职责
2014/03/16 职场文书
教育见习报告范文
2014/11/03 职场文书
文明单位创建材料
2014/12/24 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
财务稽核岗位职责
2015/04/13 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript
HttpClient实现表单提交上传文件
2022/08/14 Java/Android