Ho realizzato uno script per creare in automatico le combinazioni per una gara sportiva, ma quando vado ad avviarlo non sempre crea tutte le combinazioni e così non riesco a completare gli abbinamenti per le partite. Mi potete dare una mano?
Posto qui il codice:
$squadre = array( 'A', 'B', 'C', 'D', 'E', 'F', 'G');
//$squadre = array( 'A', 'B', 'C', 'D', 'E', 'F');
$n_squadre = count($squadre); # numero delle squadre
$ctrl = ceil($n_squadre /2) - floor($n_squadre /2);
if ($ctrl > 0) {
$n_giornate = $n_squadre; # numero giornate del girone
$squadre[] = " ";
} else {
$n_giornate = $n_squadre -1; # numero giornate del girone
}
$partite_g = floor($n_squadre /2); # numero partite del girone
#----------------------------------#
# Ciclo che genera le combinazioni #
#----------------------------------#
for ($i = $n_squadre; $i>0; $i--)
{
// debug
//print_r($squadre);
# registra il primo elemento dell'array $squadre nell'array $current
# e lo elimina dall'array $squadre
$current = array_shift($squadre);
# $tmp tiene conto del decremento di squadre a ogni giro del ciclo
$tmp = count($squadre);
# ciclo che associa a ogni elemento n dell'array $squadre
# ai restanti (n-1) elementi
for ($j=0; $j< $tmp; $j++)
{
//echo ($x+1).") $current[0] - $squadre[$j]
\n";
$partite[$x] = array( casa => $current[0] , fuori =>
$squadre[$j]);
$x++;
}
}
## Fine ciclo ##
# creo un array vuoto per il controllo delle combinazioni valide
$lista = array();
# rendo casuale l'ordine degli elementi di $partite
//shuffle($partite);
$x=0;
#-----------------------------------------------#
# Serie di cicli che associano una combinazione #
# di squadre a ogni partita del torneo #
#-----------------------------------------------#
for ($g=1; $g <= $n_giornate; $g++)
{
for ($i=0; $i < $partite_g; $i++)
{
$count = count($partite);
shuffle($partite);
//sort($partite);
for ($x=0; $x < $count ; $x++)
{
# se nessuno dei due elementi della combinazione $x
# è presente nell'array $lista la combinazione è valida
if ( !in_array($partite[$x][casa] , $lista) && !in_array($partite[$x][fuori], $lista)
)
{
# la combinazione viene assegnata all'array $giornata
$giornata[$g][$i][casa] = $partite[$x][casa];
$giornata[$g][$i][fuori] = $partite[$x][fuori];
# in caso di assegnazione la variabile $i viene incrementata
$i++;
#la combinazione valida viene inserita nella lista di controllo
array_push($lista, $partite[$x][casa], $partite[$x][fuori]);
// elimino la combinazione valida dall'array partite
unset($partite[$x]);
} # END if
} # END for ($x)
} # END for ($i)
unset($lista); # distrugge l'array $lista alla fine di ogni giornata
$lista = array(); # e lo ricrea per il prossimo giro del ciclo
//$i=1;
} # END for ($g)
// debug
// print_r($lista);

Rispondi quotando