こんにちは、私は 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 層配列。