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 相关文章推荐
Discuz 6.0+ 批量注册用户名
Sep 13 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
如何使用php输出时间格式
Aug 31 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 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
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
php变量范围介绍
2012/10/15 PHP
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
pyramid配置session的方法教程
2013/11/27 Python
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
python版本的读写锁操作方法
2016/04/25 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
python实现flappy bird游戏
2018/12/24 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python Django的web开发实例(入门)
2019/07/31 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
《会变的花树叶》教学反思
2014/02/10 职场文书
竞聘书格式及范文
2014/03/31 职场文书
鲁迅故居导游词
2015/02/05 职场文书
创卫工作总结2015
2015/04/22 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis