Ich habe eine Tabelle der verfügbaren Teams teams
, mit 24 verschiedenen Optionen.Zufällige Zuordnung, bis alle Optionen verwendet werden
Ich habe eine andere Tabelle entries
, wobei jede Zeile eine Zuordnung von einem Team zu einem Benutzer ist.
Wenn ein Eintrag erstellt wird, wird ein zufälliges Team zugewiesen, das nicht ausgewählt wurde. Wenn jedoch alle Teams zugeteilt wurden (dies kann mehrfach vorkommen), sind nur Teams verfügbar, die in dieser Runde der Zuweisung noch nicht zugewiesen wurden.
Zum Beispiel, wenn meine Teams sind A, B, C und D:
- Wenn ein Eintrag für A ist in
entries
, nur B, C und D sind verfügbar - Wenn A, B , C und D wurden ausgewählt, sie sind alle wieder verfügbar
- Wenn A 3 Einträge hat, hat B 3 Einträge, C hat 2 Einträge und D hat 2 Einträge, nur C und D sind verfügbar, bis sie alle haben die gleiche Anzahl von Einträgen
Mein Code hierfür ist verworren:
//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;
Es muss eine einfachere Methode, dies zu tun; Wie kann das gemacht werden?
Wegnehmen ') als tmin' funktioniert; Dies berücksichtigt jedoch keine Teams mit 0 Einträgen. Gibt es eine Möglichkeit, sie einzubeziehen? – Ben