我正在创建一个票务系统。我希望每个条目都是指定范围之间的唯一数字。我已经创建了函数,我将包含这些函数以展示我是如何处理事物的。如果我一口气买完所有的票,这个功能一般会有3个或4个重复的号码。
我已经尝试过这个,但如果一个人一次购买了所有的票,就会以一些重复的结果告终。我认为如果一次购买一些也会发生这种情况。这需要更加健壮。
已取票返回一组已取数字
function takenNumbers($drawID){
$connect = new mysqli("localhost", "root", "", "dream");
$stmt = $connect->prepare("SELECT * FROM transaction WHERE DrawID = ?");
$stmt->bind_param("i", $drawID);
$stmt->execute();
$result = $stmt->get_result();
$tickets = array();
while($row = $result->fetch_assoc()){
$id = $row['ID'];
$tickets[] = $row['TicketNumber'];
}
return $tickets;
}
未被采用的数字也以数组形式返回
function freeNumbers($drawID){
$minTickets = 1;
$maxTickets = totalTickets($drawID);
$takenNumbers = takenNumbers($drawID);
$freeNumbers = array();
$allTickets = range(1, $maxTickets);
$freeNumbers = array_values(array_diff($allTickets, $takenNumbers));
return $freeNumbers;
}
然后我有一个基于这些功能的随机票生成器
function randomTicket($drawID){
$num = freeNumbers($drawID);
$random = array_rand($num, 1);
return $random;
}
付款处理后,我调用此函数与 randomTicket 一起插入数据库。
for($i = 0; $i < $quantity; $i++){
echo paymentMade($paymentId, $token, $payerID, $drawID) . "<br>";
}
我收到重复。这不会发生在实时应用程序中。我已经尝试了很多东西,发现这是一个相当大的编程问题。任何和所有输入将不胜感激。在此先感谢各位。