< ? php
//简单的抽奖算法
//prob概率 总和为1k , 10k , 100k,自己设 id为具体奖品
$data = [[‘prob’ =–> 6000 , ‘id’ => 1],
[‘prob’ => 16500 , ‘id’ => 2],
[‘prob’ => 16500 , ‘id’ => 3],
[‘prob’ => 900 , ‘id’ => 4],
[‘prob’ => 700 , ‘id’ => 5],
[‘prob’ => 59000 , ‘id’ => 6],
[‘prob’ => 200 , ‘id’ => 7],
[‘prob’ => 200 , ‘id’ => 8],
];

//抽奖概率

if(count($data) == 1){
$gift = $data[0];
}else{
//抽奖概率
$prob_arr = [];
$proSum = array_sum(array_column($data,’prob’)); //概率总数目 千级 万级

//计算1 推荐 10w内存消耗5M
foreach ($data as $dk => $dg) {
for($i=0;$i<$dg[‘prob’];$i++){ $prob_arr[] = $dk; } } //计算2 这种的内存消耗是1的2倍 时间消耗是1的4倍(10w测试,内存消耗10M) 并且概率总数越大,差别越大 这个不要用 // foreach ($data as $dk => $dg) {
// $prob_arr = array_merge($prob_arr,array_fill(0,$dg[‘prob’],$dk));
// }

shuffle($prob_arr);//打乱数组
$prob_id = $prob_arr[mt_rand(0,$proSum-1)];

//抽奖概率结束
$gift = $data[$prob_id];
}

//本机联想E470测试结果如下

//0.000700 ~ 0.000200 ,内存使用189k 总和1k
//0.001400 ~ 0.004400 ,内存使用706k 总和10k
//0.040100 ~ 0.024300 ,内存使用5M 总和100k

后续优化

我的tomcat9放在c盘,项目想放到d盘。如下操作

1.创建目录 D:\program\web 并把tomcat项目中的的WEB_INF考入其目录下

2.修改tomcat/conf/server.xml  在host目录内添加一行 <Context path=”/web” docBase=”D:\program\web” />

重启tomcat就可以了

这时候出现了404。想要把web目录list显示出来。修改一下tomcat/conf/web.xml如下,并重启

<param-name>listings</param-name>
<param-value>true</param-value>

支付宝无法验签的原因是公钥的问题

支付宝的公钥分为两种,一.应用公钥 二.支付宝公钥

1.应用公钥是rsa256 就是你用支付宝工具生成的公钥和私钥。此公钥就是应用公钥,要上传到支付宝开放平台。

2.一旦你上传了应用公钥,就可以查看支付宝公钥。

然后你拿appid和你在1中生成的私钥去支付和退款

支付宝发给你数据你要拿2中的支付宝公钥验签。注意不是应用公钥