0

こんにちは、私は 100 万の乱数をチケットの x の量に分割する一種のラッフル システムに取り組んでいます。たとえば、100 万の乱数を 10,000 のチケットに分割します。

各チケットはデータベースの行であり、チケット ID によって関連付けられている各チケットに 100 の番号を与える必要がある別のテーブル チケット番号があります。

だから現時点ではこれが私のコードです:

//Amount of the 1 million tickets divided to the tickets
$numbersPerTickets = $_POST['numbersPerTicket'];

//The total cost of the property
$propertyPrice = $_POST['propertyPrice'];

//The total amount of tickets
$totalTickets = NUMBER_CIELING / $numbersPerTickets;

//The ticket price
$ticketPrice = $propertyPrice / $totalTickets;

//Generate array with random numbers up to 999,999
$randomTicketNumbers = createTicketNumbers();

//Creation loop counter
$ticketCreationCount = 1;

//Loop and create each ticket
while($ticketCreationCount <= $totalTickets)
{

    //Create a padded ticket number
    $ticketNumber = str_pad($ticketCreationCount, 6, 0, STR_PAD_LEFT);

    $query = '
        INSERT INTO tickets(
            propertyID,
            ticketNumber,
            price
        )
        VALUES(
            "'.$propertyID.'",
            "'.$ticketNumber.'",
            "'.$ticketPrice.'"
        )
    ';

    $db->query($query);

    //Get the ID of the inserted ticket to use to insert the ticket numbers
    $ticketID = $db->insert_id;

    $loopBreak = $numbersPerTickets;
    $addedNumberCount = 1;

    foreach($randomTicketNumbers as $key => $value)
    {

        $query = '
            INSERT INTO ticketNumbers(
                ticketID,
                number
            )
            VALUES(
                "'.$ticketID.'",
                "'.$value.'"
            )
        ';

        $db->query($query);

        unset($randomTicketNumbers[$key]);

        if($addedNumberCount == $loopBreak){ 
            break;
        }else{ 
            $addedNumberCount++;
        }

    }

    $ticketCreationCount++;

}

しかし、これは機能しません。テストの場合は 10,000 のチケット数が追加されますが、あまりにも多くのチケット番号が追加され、ランダム チケット配列の数が 100 万を超えてしまいます。ランダム チケット配列はちょうどランダムにソートされた 100 万個の数字を含む単純な 1 層配列。

4

1 に答える 1

2

foreach ループを for に変更します。

for ($i = 1; $i <= $numbersPerTickets; $i++) {
    $query = ' 
        INSERT INTO ticketNumbers( 
            ticketID, 
            number 
        ) 
        VALUES( 
            "'.$ticketID.'", 
            "'.$randomTicketNumbers[$i].'" 
        ) 
    '; 

$numbersPerTickets の反復のみを提供することが保証され、複雑な iterator++/break ロジックが削除されます。

シンプルな方が良い場合もあります。

私のphpを修正してください!ティア。

于 2012-07-07T15:11:11.643 に答える