所以,我正在尝试建立一个票务系统。因此,每个用户将被分配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
}
}
答案 0 :(得分:0)
我需要更多代码来推荐一个完美的解决方案,并且还知道为什么要为一个人分配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"];