Created
January 12, 2014 15:58
-
-
Save mauromarano/8386398 to your computer and use it in GitHub Desktop.
classe per generare un calendario sportivo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
// ============================== | |
// = Realizzato da Mauro Marano = | |
//= Sito web mauromarano.it = | |
//= email [email protected] = | |
// ============================== | |
Classe che serve per generare il calendario di un evento sportivo. | |
L'uso è molto semplice: | |
1) Si inizializza la classe: $object= new calendario_sportivo(); | |
2) Si imposta il numero di squadre o persone che compongono il torneo: $object->squadre = 8; | |
3) Si crea il calendario e lo si salva in una matrice: $cal = $object->crea_calendario(); | |
4) Volendo si può stampare il calendario con la seguente funzione: $object->stampa($cal); | |
Come si legge la matrice che si riceve? | |
Supponiamo di aver creato un calendario per 8 squadre. | |
Riceveremo la seguente matrice: | |
Array ( | |
[0] => Array ( [0] => 5 [1] => 3 [2] => 6 [3] => 2 [4] => 7 [5] => 1 [6] => 8 [7] => 4 ) | |
[1] => Array ( [0] => 5 [1] => 4 [2] => 6 [3] => 3 [4] => 7 [5] => 2 [6] => 8 [7] => 1 ) | |
[2] => Array ( [0] => 2 [1] => 1 [2] => 6 [3] => 4 [4] => 7 [5] => 3 [6] => 8 [7] => 5 ) | |
[3] => Array ( [0] => 3 [1] => 1 [2] => 6 [3] => 5 [4] => 7 [5] => 4 [6] => 8 [7] => 2 ) | |
[4] => Array ( [0] => 3 [1] => 2 [2] => 4 [3] => 1 [4] => 7 [5] => 5 [6] => 8 [7] => 6 ) | |
[5] => Array ( [0] => 4 [1] => 2 [2] => 5 [3] => 1 [4] => 7 [5] => 6 [6] => 8 [7] => 3 ) | |
[6] => Array ( [0] => 4 [1] => 3 [2] => 5 [3] => 2 [4] => 6 [5] => 1 [6] => 8 [7] => 7 ) | |
) | |
Ogni elemento della matrice corrisponde ad una giornata. | |
In ogni giornata ci sono gli incontri da giocare. Prendiamo ad esempio la prima giornata, gli incontri vanno letti in questo modo: | |
[0] => 5 VS [1] => 3 | |
[2] => 6 VS [3] => 2 | |
[4] => 7 VS [5] => 1 | |
ecc. | |
In poche parole si prende il 1° elemento di ogni giornata e si scontra con il 2° elemento. Poi si prende l'elemento 3° e si scontra con l'elemento 4° e cosi via. | |
Da questa matrice potete poi facilmente ottenere tutto quello che volete! | |
*/ | |
class calendario_sportivo{ | |
public $squadre = 8; | |
public function crea_calendario(){ | |
$partite_per_gironi = $this->squadre-1; | |
$righe_rimanenti= $this->squadre-2; | |
$matrix = array(); | |
$matrice_finale = array(); | |
$prima_riga = array(); | |
for ($j=1; $j <= $this->squadre ; $j++) { | |
$prima_riga[$j-1] = $j; | |
} | |
for ($i=1; $i <=$partite_per_gironi ; $i++) { | |
$indice = $this->squadre; | |
for ($j=1; $j <= $this->squadre ; $j++) { | |
if($i==1){ | |
$matrix[$i][$j]=$prima_riga[$j-1]; | |
} | |
elseif($i==2){ | |
if($j!=$this->squadre){ | |
$matrix[$i][$j]=$matrix[$i-1][$indice-1]; | |
$indice--; | |
} | |
} | |
} | |
} | |
$pippo = $matrix[2]; | |
for ($i=3; $i <=$this->squadre ; $i++) { | |
$pippo = $this->trasla($pippo); | |
$matrix[$i] = $pippo; | |
} | |
for ($i=2; $i <= $this->squadre ; $i++) { | |
$doppio = $this->trova_doppione($matrix[1],$matrix[$i]); | |
$matrix[$i][$this->squadre] = $doppio; | |
$matrix[$i][$doppio] = $this->squadre; | |
} | |
$aa = 0; | |
for ($i=2; $i <=count($matrix) ; $i++) { | |
$temp = $this->pulusci_coppie($matrix[1],$matrix[$i]); | |
$matrice_finale[$aa]=$temp; | |
$aa++; | |
} | |
return($matrice_finale); | |
} | |
public function stampa($matrix){ | |
echo "<table>"; | |
for ($i=0; $i <count($matrix) ; $i++) { | |
$a=$i+1; | |
echo "<tr>"; | |
echo "<td><b>Giornata ".$a."</b></td>"; | |
for ($j=0; $j <count($matrix[0]) ; $j++) { | |
echo "<td>[ ".$matrix[$i][$j]." ] </td>"; | |
if($j%2==0){ | |
echo "<td> VS </td>"; | |
} | |
} | |
echo "</tr>"; | |
} | |
echo "</table>"; | |
} | |
public function trasla($arr){ | |
$x = count($arr); | |
$ris = array(); | |
for ($i=1; $i <= $x ; $i++) { | |
if($i==1){ | |
$ris[1] = $arr[$x]; | |
} | |
else{ | |
$ris[$i] = $arr[$i-1]; | |
} | |
} | |
return $ris; | |
} | |
public function trova_doppione($arr,$arr2){ | |
for ($i=1; $i <= count($arr) ; $i++) { | |
if($arr[$i]==$arr2[$i]){ | |
return $i; | |
} | |
} | |
return false; | |
} | |
public function pulisci_matrice($matrix){ | |
$ris = array(); | |
$temp = array(); | |
for ($i=2; $i <= count($matrix) ; $i++) { | |
for ($j=1; $j <=count($matrix[1]); $j++) { | |
$a = $matrix[1][$j]; | |
$b = $matrix[$i][$j]; | |
$temp[0][$j]=$a; | |
$temp[1][$j]=$b; | |
} | |
} | |
return $ris; | |
} | |
public function pulusci_coppie($arr,$arr2){ | |
$ris = array(); | |
for ($i = 1; $i <= count($arr); $i++) { | |
$x1 = $arr[$i]; | |
$x2 = $arr2[$i]; | |
$ok = 0; | |
for ($j = $i+1; $j <= count($arr2); $j++) { | |
$y1 = $arr[$j]; | |
$y2 = $arr2[$j]; | |
if($x1 == $y2 && $x2 == $y1){ | |
$ok = 1; | |
} | |
} | |
if ($ok == 0) { | |
$ris[] = $x1; | |
$ris[] = $x2; | |
} | |
} | |
return $ris; | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment