PHP-функция Laravel для генерации 90 уникальных значений для 90 полей.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PHP-функция Laravel для генерации 90 уникальных значений для 90 полей.

Сообщение Anonymous »

Я хочу сгенерировать набор билетов. В одном наборе 6 билетов. В одном билете 27 полей от b_1 до b_27. Это показано в трех строках, где каждая строка имеет 9 полей и 5 значений.
В первой строке — от 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;
}
Эта функция способна генерировать значение для первых 5 билетов, но застревает в последнем билете.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -90-fields
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»