[ '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);