<?php
// Hráči z databáze
$players = [1, 2, 3, 4, 5, 6, 7];
// Skupiny z databáze
$groups = [
0 => [
'id' => 1,
'max_players' => 1,
'players' => '',
],
1 => [
'id' => 2,
'max_players' => 2,
'players' => '',
],
2 => [
'id' => 2,
'max_players' => 4,
'players' => '',
],
];
// Počet hráčů
$player_sum = count($players);
// Počet skupin
$group_sum = count($groups);
// Číslo skupiny pro použití
$group_index = 0;
// Dokud jsou dostupní hráči probíhá cyklus
for($i = 0; $i < $player_sum; $i++) {
// Aktuální počet hráčů ve skupině
// Pokud není řetezec prázdný (je určen alespoň jeden hráč)
if($groups[$group_index]['players'] != '') {
// Spočítání podle vytvořeného pole a spočítání jeho klíčů
$array_of_players = explode(',', $groups[$group_index]['players']); // Vytvoření pole hráčů, aby šli spočítat klíče
$actual_player_sum_in_group = count($array_of_players); // Spočítání počtu klíčů
}
// Pokud je prázdný řetezec (není určen žádný hráč)
else {
// Nastavit autoaticky na nulu
$actual_player_sum_in_group = 0;
}
// Maximální počet hráčů ve skupině
$max_players_in_group = $groups[$group_index]['max_players'];
// Pokud ještě není skupina naplněna
if($actual_player_sum_in_group < $max_players_in_group) {
// Přidání hráče do skupiny
// Pokud se jedná o prvního hráče u dané skupiny
if($i < $group_sum) {
// Nepřidávat čárku na začátek (přidal by se i index a systém se rozbil)
$groups[$group_index]['players'] .= $players[$i];
}
// Pokud již skupina má alespoň jednoho hráče
else {
// Přidat čárku na začátek, aby se dalo vytvořit pole
$groups[$group_index]['players'] .= ',' . $players[$i];
}
}
// Skupina je již naplněna -> Hráč nebyl použit
else {
// Odečíst index hráče, aby mohl být znovu použit při vkládání do jiné skupiny (dalším průběhu cyklu)
$i--;
}
// Pokud je ještě další skupina v řadě
if($group_index < $group_sum - 1) {
// Přičíst hodnotu do indexu
$group_index++;
}
// Pokud se jedná o poslední skupinu
else {
// Začít od začátku
$group_index = 0;
}
}
// Výpis výsledku
print_r($groups);
Comments