У меня есть таблица доступных команд teams
, с 24 различными вариантами.Случайное распределение до тех пор, пока не будут использованы все опции
У меня есть другая таблица entries
, где каждая строка представляет собой выделение одной команды пользователю.
При создании записи выделяется случайная команда, которая не выбрана. Однако, если все команды выделены (это может произойти несколько раз), доступны только команды, еще не выделенные в этом раунде распределения.
Например, если мои команды A, B, C и D:
- Если есть запись для А в
entries
, только B, C и D доступны - Если A, B , C и D были выбраны, это все доступно снова
- IF A имеет 3 записи, B имеет 3 записи, C имеет 2 записи, а D имеет 2 записи, только C и D доступны, пока все они не имеют такое же количество записей
Мой код для этого замысловатого:
//Make array of teams
for($i=1;$i<=24;$i++) $team[$i] = 1;
//Get entries from database
$stmt = $dbh->prepare("SELECT `team` FROM `entries`");
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
//Create array of available teams
$numRows = $stmt->rowCount();
while($numRows >= 24) {
for($i=1;$i<=24;$i++) {
$team[$i] = $team[$i]+1;
}
$numRows = $numRows - 24;
}
//Remove entries for teams in array
foreach($rows as $row) $team[$row["team"]] = $team[$row["team"]]-1;
foreach($team as $i => $v) if($v > 0) $available[] = $i;
Там должна быть более простой способ для достижения этой цели; Как это может быть сделано?
Убирает '), как работает tmin'; однако это не учитывает команды с 0 записями. Есть ли способ включить их? – Ben