Skip to content

Instantly share code, notes, and snippets.

@mauromarano
Created January 12, 2014 15:58
Show Gist options
  • Save mauromarano/8386398 to your computer and use it in GitHub Desktop.
Save mauromarano/8386398 to your computer and use it in GitHub Desktop.
classe per generare un calendario sportivo
<?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