所以,我正在尝试制作票务系统。因此,用户将分配1000个票,然后我将生成一个从1到5000的数字,然后我需要它来选择用户。
我这样做的方式是一个数组,然后循环5000次并为每个用户分配了一张票,但是这与5,000,000之类的很大数字不起作用。因此,我正在尝试考虑最好的方法,但我不确定如何。
有建议吗?
$users = array();
$ticketNum = 0;
$result = $MySQL->query("SELECT * FROM `users` ");
while($row = $result->fetch_assoc()){
$i = 0;
while($i < $row['points']){
$i++;
$ticketNum++;
$ar = array("ticketNum" => $ticketNum, "username" => $row['username']);
array_push($users, $ar);
}
}
$winningTicket = 2500;
foreach($players as $ar){
if($winningTicket == $ar['ticketNum']){
//winner
}
}
我需要更多代码来建议一个完美的解决方案,并且也知道为什么要为一个人分配1000张门票?
但是您可以分配一个从键而不是通过循环所有数字,例如
$users[$userNumber]["from"] = 1;
$users[$userNumber]["to"] = 6;
$findNumber = rand(1,6);
$foundUser = false;
foreach($users as $userNumber => $user) {
if ($user["from"] <= $findNumber && $user["to"] >= $findNumber) {
$foundUser = $user;
break;
}
}
if ($foundUser) {
print "Hooray, someone just got a ticket.";
}
,但听起来确实像是通过数据库以不同的方式解决的工作。
编辑:我在添加代码示例之前写了上面的内容,在您的情况下,我可能会执行以下操作。
$result = $MySQL->query("SELECT username FROM users ORDER BY RAND() LIMIT 1");
$winningUser = $result->fetch_assoc();
print "We got a winner: ".$winningUser["username"];