'null', 'id' => 'null']; // $allAbt[] = ['name' => 'null', 'id' => 'null']; /*$stmt = $mysqli->prepare(" SELECT t.id, t.programm, t.verein, GROUP_CONCAT(ta.id SEPARATOR ', ') AS abt_table_id FROM $tableTurnerinnen t LEFT JOIN $tableTurnerinnenAbt ta ON ta.turnerin_id = t.id GROUP BY t.id, t.programm, t.verein ORDER BY t.id DESC "); $stmt->execute(); $result = $stmt->get_result(); $allTurnerinnen = $result->fetch_all(MYSQLI_ASSOC); $stmt->close(); print_r($allTurnerinnen);*/ $allTurnerinnen = db_select($mysqli, $tableTurnerinnen, "id, programm, verein, name" , "", [], "programm ASC"); $grouped = []; foreach ($allTurnerinnen as $t) { $sanitasedprogramm = str_replace(['-kader'], '', strtolower($t['programm'])); $grouped[$sanitasedprogramm][$t['verein']][] = $t; } function getMinKey(array $array): string|int { return array_search(min($array), $array, true); } function arrayRiegeneiteilung($allturnerinnen, $maxTurnerinnenGruppe, $allGeraete) { $indabt = 1; $arrayAutoRiegeneinteilung = []; foreach ($allturnerinnen as $prog => $vereine) { // ABTEILUNG BERECHNEN $countturterinnenprog = 0; foreach ($vereine as $verein => $turnerinnen) { foreach ($turnerinnen as $ind => $turnerin) { $countturterinnenprog++; $abt = intdiv($countturterinnenprog, $maxTurnerinnenGruppe * count($allGeraete)) + $indabt; $allturnerinnen[$prog][$verein][$ind]['abt'] = $abt; $arrayAbt[$abt][$verein][] = $turnerin; } } $indabt += intdiv($countturterinnenprog - 1, $maxTurnerinnenGruppe * count($allGeraete)) + 1; } foreach ($arrayAbt as $abt => $vereine) { // AUSGLEICHEN DER GRUPPEN $arrayAbt = []; $arrayGruppen = []; foreach ($allGeraete as $geraet) { $arrayGruppen[$geraet['id']] = 0; } $turnerinnenCount = 0; foreach ($vereine as $verein => $turnerinnen) { $turnerinnenCount += count($turnerinnen); } foreach ($vereine as $verein => $turnerinnen) { if (count($turnerinnen) > $maxTurnerinnenGruppe || count($turnerinnen) > $turnerinnenCount / count($allGeraete)) { if (count($turnerinnen) > $turnerinnenCount / count($allGeraete)) { $maxTurnerinnenGruppeTemp = ceil($turnerinnenCount / count($allGeraete)); } else { $maxTurnerinnenGruppeTemp = $maxTurnerinnenGruppe; } // AUFTEILEN IN MEHRERE GRUPPEN $chunks = array_chunk($turnerinnen, $maxTurnerinnenGruppeTemp); foreach ($chunks as $chunk) { $minKey = getMinKey($arrayGruppen); $arrayGruppen[$minKey] += count($chunk); foreach ($chunk as $ind =>$turnerin) { $arrayAutoRiegeneinteilung[$abt][$minKey][] = $turnerin; } } continue; } $minKey = getMinKey($arrayGruppen); $arrayGruppen[$minKey] += count($turnerinnen); foreach ($turnerinnen as $ind =>$turnerin) { $arrayAutoRiegeneinteilung[$abt][$minKey][] = $turnerin; } } } foreach ($arrayAutoRiegeneinteilung as $indAbt => $abt) { foreach ($abt as $indGeraet => $geraet) { foreach ($geraet as $indTurnerin => $turnerin) { $arrayAutoRiegeneinteilung[$indAbt][$indGeraet][$indTurnerin]['turnerin_index'] = $indTurnerin + 1; } } } return $arrayAutoRiegeneinteilung; } $arrayAutoRiegeneinteilung = arrayRiegeneiteilung($grouped, $maxTurnerinnenGruppe, $allGeraete); $stmt = $mysqli->prepare("DELETE FROM $tableTurnerinnenAbt"); $stmt->execute(); $stmt->close(); $stmt = $mysqli->prepare("DELETE FROM $tableAbt"); $stmt->execute(); $stmt->close(); foreach ($arrayAutoRiegeneinteilung as $indAbt => $abt) { $stmt = $mysqli->prepare("INSERT INTO $tableAbt (name) VALUES (?)"); $stmt->bind_param("s", $indAbt); $stmt->execute(); $idAbt = $stmt->insert_id; $stmt->close(); foreach ($abt as $indGeraet => $geraet) { foreach ($geraet as $indTurnerin => $turnerin) { $stmt = $mysqli->prepare("INSERT INTO $tableTurnerinnenAbt (turnerin_id, abteilung_id, geraet_id, turnerin_index) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss", $turnerin['id'], $idAbt, $indGeraet, $turnerin['turnerin_index']); $stmt->execute(); $stmt->close(); } } } return http_response_code(201); /*foreach ($grouped as $ind => $g) { echo $ind; foreach ($g as $verein) { foreach ($verein as $turnerin) { echo '