ceskyDJ icon

Zapeklité skupiny xD

ceskyDJ | PRO | 08/03/16 04:16:39 PM UTC | 0 ⭐ | 244 👁️ | Never ⏰ | []
PHP |

2.4 KB

|

None

|

0 👍

/

0 👎

<?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