用PHP怎样实现权重算法,有什么优势
Admin 2022-07-07 群英技术资讯 632 次浏览
本文实例讲述了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)
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在laravel中,with()方法是用作“渴求式加载”,表示laravel将会伴随着主要模型预加载出确切的的关联关系,使用该方法能够缓解“1+N”的查询问题,仅需“1+1”次查询就能解决问题。
根据很多需求的使用场景,如发红包、砍价类需求,这两个功能都有一个同样的特点,如下:1.总金额;2.红包个数;3.最小红包数量。
本篇文章来看看如何计算数组中所有元素之和,给大家介绍3钟方法:for循环、foreach循环和array_sum()函数(是的使用内置函数,PHP中内置了许多函数,来帮助我们进行开发),下面我们来一起看看吧。
swoole在协程编程中可直接使用try/catch处理异常。但必须在协程内捕获,不得跨协程捕获异常。不仅是应用层throw的Exception,底层的一些错误也是可以被捕获的。
本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008