PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-08 12:08:04 浏览: 评论:0
这篇文章主要介绍了PHP实现的权重算法,可用于游戏根据权限来随机物品,涉及php数组遍历、随机数处理及数值运算相关操作技巧,需要的朋友可以参考下。
本文实例讲述了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)
- }
Tags: PHP权重算法 PHP随机物品
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)