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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
PHP 一个页面执行时间类代码
Mar 05 PHP
php标签云的实现代码
Oct 10 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
php判断表是否存在的方法
Jun 18 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
一段实用的php验证码函数
May 19 PHP
PHP生成短网址方法汇总
Jul 12 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 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类
2006/07/15 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
PHP fclose函数用法总结
2019/02/15 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
javascript常用方法汇总
2014/12/02 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
详解Node全局变量global模块
2017/09/28 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
vue中如何添加百度统计代码
2020/12/19 Vue.js
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
自行车租赁公司创业计划书
2014/01/28 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP