如何使 PHP Ticker 编号分配更健壮?

我正在创建一个票务系统。我希望每个条目都是指定范围之间的唯一数字。我已经创建了函数,我将包含这些函数以展示我是如何处理事物的。如果我一口气买完所有的票,这个功能一般会有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>";

}

我收到重复。这不会发生在实时应用程序中。我已经尝试了很多东西,发现这是一个相当大的编程问题。任何和所有输入将不胜感激。在此先感谢各位。


守候你守候我
浏览 116回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP