PHP号码票系统?

时间:2016-06-18 21:07:57

标签: php

所以,我正在尝试建立一个票务系统。因此,每个用户将被分配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
    }
}

1 个答案:

答案 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"];