惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
P
Palo Alto Networks Blog
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
S
Schneier on Security
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
雷峰网
雷峰网
T
Tenable Blog
人人都是产品经理
人人都是产品经理
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
AWS News Blog
AWS News Blog
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
Scott Helme
Scott Helme
SecWiki News
SecWiki News
C
CERT Recently Published Vulnerability Notes
Recorded Future
Recorded Future
I
InfoQ
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
Cloudbric
Cloudbric
C
Check Point Blog
Engineering at Meta
Engineering at Meta
TaoSecurity Blog
TaoSecurity Blog
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
N
News and Events Feed by Topic
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
腾讯CDC
量子位
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
Kaspersky official blog
Vercel News
Vercel News
F
Full Disclosure
T
Troy Hunt's Blog
Forbes - Security
Forbes - Security
S
Security @ Cisco Blogs

博客园 - Dragon4

IIS7中如何配置Url重写 优化出来的bug:慎用static 数据库学习-索引设计准则 如何拯救你,我的数据-单个mdf文件恢复数据库小记 程序员八卦:十年前天大的秘密-相约1998 Blog搬家到此,文章导入完毕,发帖庆祝。 [导入]中文版IE7for XP SP2下载地址 [导入]VS2008中文版TS版下载地址 [导入]Flex builder3 Crack 下载地址 [导入]各浏览器CSS hack [导入]VS2005 WInform程序如何调用js [导入]HttpWebResponse与WebResponse的区别 [导入]WinForm程序如何等待多个线程执行完后提示用户? [导入]Vistual studio2008RTM版本发布,附正版序列号 [导入]Request.ServerVariables参考 [导入]APS.NET获取用户端真实IP [导入]透过LINQSQO看LINQ内部机理 [导入]奇怪的数据插入异常:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。 [导入]Flex应用启动背后的故事
[转]PHP权重算法-用于游戏根据权限来随机物品
Dragon4 · 2010-08-28 · via 博客园 - Dragon4

假设有数据:

$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


算法如下:

 1 $weight = 0;
 2 $tempdata = array();
 3 foreach ($data as $one) {
 4 
 5 $weight += $one['weight'];
 6 
 7 for ($i = 0$i < $one['weight']; $i ++) {
 8 $tempdata[] = $one;
 9 
10 }
11 
12 }
13 $use = rand(0, $weight – 1);
14 $one = $tempdata[$use];
15 

最终得到的$one,就是源数据数组中按照权重分配,随机得到的数据。