微信红包算法实现PHP分析(非官方)
最近,微信群经历了红色的包的功能,并有两种类型的红包:
1。普通红包
2。拼运气红
普通信封不多解析,杂乱原理,分。
红色打运气是靠运气(运气),人可以少很多,抢了穷人,肯定不是抢,一定是随机的。
如果你考虑它,你可以写,看看你是否可以实现类似的功能(不要说这是一个算法)。
bonus_total美元/红总金额
bonus_count美元/红数
1型= / / bonus_type美元红包0 =普通红拼运气
功能randbonus($ bonus_total = 0美元= 3美元,bonus_count,bonus_type = 1){
bonus_items美元=(阵列); / /分的结果
bonus_balance美元=美元bonus_total; / /平衡后完成的
bonus_avg = number_format美元(美元bonus_total / bonus_count美元,2); / /多少是平均红
$ I = 0;
而($我<< bonus_count美元){
如果(我的<< bonus_count-1美元){
兰德(RAND bonus_type美元= $(1,$ bonus_balance×100-1):bonus_avg美元; / / / 100)计算的红包金额根据类型
bonus_items美元{ } = $兰德;
bonus_balance美元= $兰德;
其他{ }
bonus_items美元{ } = $ bonus_balance; / /最后的红包直接签订合同,最后所有的金额,担保总额发行权
}
美元+;
}
返回的bonus_items;
}
好吧,让我们来体验一下吧。
3 法术幸运奖金,总金额为100元。
bonus_items美元= randbonus(100, 3, 1);
生成信封
var_dump($ bonus_items);
/ /检查总金额是不正确的,看到微信有我们的钱坑
var_dump(array_sum($ bonus_items));
使用数组实现的另一个版本是相同的:
功能sendrandbonus($总= 0美元= 3美元,数量,类型= 1){
如果($ = 1){
$输入=范围(0.01,总计,0.01);
如果($ > 1){
rand_keys美元=(阵列)array_rand(美元输入,count-1美元);
最后0美元;
foreach(rand_keys美元美元美元我= >键){
当前输入= $输入;
$项目;
最后一个= $;
}
}
$项目{ } = total-array_sum美元($项目);
其他{ }
AVG = number_format美元(美元/美元总计数,2);
$ I = 0;
当($ i $计数){
$项目{ } = $我<< count-1美元美元(平均:total-array_sum美元($项目));
美元+;
}
}
返回$项;
}
希望本文能对大家的PHP程序设计有所帮助。