В первой строке — от b_1 до b_9, во 2-й строке — от b_10 до b_18, а в третьей строке — от b_19 до b_27.Для всех билетов отображается формат данных. Итак, на изображении вы можете видеть, что у нас всего 6*3 = 18 строк, каждая строка по 9 столбцов.
У нас всего 90 значений в этих полях от 1 до 90 и каждое значение. является уникальным. Никакое значение не указывается дважды.
В каждом столбце у нас есть 18 полей, а для 1 заявки у нас есть 3 поля.
В 1-м столбце значение находится в диапазоне от 1 до 9 – Значение 9
Во 2-м столбце значение находится в диапазоне от 10 до 19 - значение 10
В 3-м столбце значение находится в диапазоне от 20 до 29 - значение 10
В 4-м столбце значение находится в диапазоне от 30 до 39 – значение 10
В 5-м столбце значение находится в диапазоне от 40 до 49 – значение 10
В 6-м столбце значение находится в диапазоне от 50 до 59 – значение 10
В 7-м столбце в столбце значение находится в диапазоне от 60 до 69 – значение 10
В 8-м столбце значение находится в диапазоне от 70 до 79 – значение 10
/>В девятом столбце значение находится в диапазоне от 80 до 90–11.
введите здесь описание изображения
Код: Выделить всё
private function createGameTokens($game, $initialSetNumber, $noOfSets) {
try {
$batchSize = 1000;
$tokens = [];
for ($setNumber = $initialSetNumber; $setNumber $game->id,
'set_id' => $setNumber,
'created_at' => now(),
'updated_at' => now(),
]);
for ($i = 0; $i $game->id,
'game_set_id' => $gameSet->id,
'set_id' => $setNumber,
'ticket_id' => ($i + 1), // Ticket ID starts from 1 and increments
'created_at' => now(),
'updated_at' => now(),
];
for ($row = 1; $row findValueIndex($field);
return !empty($colPools[$colIndex]);
});
if (empty($validFields)) {
break; // Exit if no valid fields are left
}
// Pick a random valid field
$selectedField = $validFields[array_rand($validFields)];
$selectedFieldCol = $this->findValueIndex($selectedField);
// Pick a random number from the corresponding column pool
$selectedNumber = array_shift($colPools[$selectedFieldCol]);
if ($selectedNumber !== null) {
// Assign the field and value
$fieldsData['b_' . $selectedField] = $selectedNumber;
$fields = array_diff($fields, [$selectedField]); // Remove field
}
}
// If the row is incomplete due to field exhaustion, log an error
if (count($fieldsData) < 5) {
Log::error("Incomplete row detected", [
'row' => $row,
'fieldsData' => $fieldsData,
'remainingPools' => $colPools,
]);
}
$ticketData = array_merge($ticketData, $fieldsData);
}
// Add the ticket data to the tokens array
$tokens[] = $ticketData;
// Insert tickets in batches
dd($tokens);
}
// Insert remaining tokens
if (!empty($tokens)) {
DB::transaction(function () use ($tokens) {
foreach ($tokens as $token) {
DB::table('game_tokens')->insert($token);
}
});
}
} catch (\Exception $e) {
// Log the error
Log::error('Error in '. $e->getMessage());
}
}
}
private function findValueIndex($value)
{
$col = array(
array(1, 10, 19),
array(2, 11, 20),
array(3, 12, 21),
array(4, 13, 22),
array(5, 14, 23),
array(6, 15, 24),
array(7, 16, 25),
array(8, 17, 26),
array(9, 18, 27)
);
// Search for the row (index) that contains the value
$rowIndex = array_search(true, array_map(function ($row) use ($value) {
return in_array($value, $row);
}, $col));
return $rowIndex;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -90-fields
Мобильная версия