我将要创建一个“抽奖系统”。
请看我的表格:
userid-lottaryid-amount
1 -------- 1 ---- 1
2 -------- 1 ---- 10
3 -------- 1 ---- 15
4 -------- 1 ---- 20
我希望选择一个获胜者和第二名。
但是我不能随机选择获胜者,因为第四个用户有20张彩票,而第一个用户只有一张。所以我需要通过权重生成随机结果,以使比赛更加公平。
我找到了下面的php函数,但我不知道如何使用它。
function weighted_random_simple($values, $weights){
$count = count($values);
$i = 0;
$n = 0;
$num = mt_rand(0, array_sum($weights));
while($i < $count){
$n += $weights[$i];
if($n >= $num){
break;
}
$i++;
}
return $values[$i];
}
$values = array('1', '10', '20', '100');
$weights = array(1, 10, 20, 100);
echo weighted_random_simple($values, $weights);
我需要将userid
列作为数组获取到$values
中,将amount
列获取到$weights
中。但是我无法完成。
以下是我目前的代码:
$query = $handler->prepare("SELECT
`cvu`.`lottaryid` as `lottaryid`,
`cvu`.`userid` as `userid`,
`cvu`.`amount` as `amount`,
`members`.`id` as `members_memberid`,
`members`.`username` as `username`
FROM `lottariesandmembers` as `cvu`
LEFT JOIN `members` as `members` ON `cvu`.`userid` = `members`.`id` WHERE `cvu`.`lottaryid` = 2");
$query->bindParam(':lottaryid', $lottaryid, PDO::PARAM_INT);
$query->execute();
while($r = $query->fetch()) {
for ( $count=1 ; $count <= $r["amount"] ; $count++ ) {
$abcprint = "$r[userid].$count - $r[username] - <br>";
echo "$abcprint";
}
}
我有一段代码,只会按照用户数量重复列出用户。例如:
1.1 user1
2.1 user2
2.2 user2
2.3 user2
..
2.10 user2
3.1 user3
..
3.15 user3
4.1 user4
..
4.20 user4
等等等等。。。但我不知道如何从列表中选择获胜者。
如果您愿意帮助我,我想合并这些代码并创建这个小脚本。
如果您有其他解决方案,我也很乐意进行头脑风暴。