Classement automatique

Résolu
Signaler
Messages postés
67
Date d'inscription
mercredi 14 février 2007
Statut
Membre
Dernière intervention
22 mars 2009
-
Messages postés
67
Date d'inscription
mercredi 14 février 2007
Statut
Membre
Dernière intervention
22 mars 2009
-
Bonjour à tous !!!

Suite à des résultats de Rugby, j'aimerais faire un classement automatique en fonction des points et de la différence de points.

Imaginons un groupe de 4 avec les equipe a, b, c et d.

Avec des matchs :
a-b
c-d

Je pense qu'une idée de départ serait de stockée les scores de a, b, c et d dans des variables comme score_a, score_b... pour ensuite pouvoir les comparer et affecter 4 points à l'equipe qui gagne, 2 points pour match nul et 0 pour la defaite.

Mais apres je ne vois pas comment faire pour obtenir et afficher un classement trié par points et différence de points...

Merci de votre aide !!!

2 réponses

Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Salut,
Voici un petit code qui pourrait t'aider ;-) Par contre il ne gère pas les équipes exaequo j'essaye de régler çà ce soir ^^
<?php
$classement = array(); // Tableau qui contiendra les points.
$equipes = array('Equipe A', 'Equipe B', 'Equipe C', 'Equipe D'); // Equipes.$resultats array('Equipe A-Equipe B'> '7-0', 'Equipe C-Equipe D' => '14-7', 'Equipe C-Equipe A' => '14-24'); // Resultats.

$hight = 0; // Variable contenant le score le plus élevé.
$i = -1;
$keys = array_keys($resultats); // On prends toutes les clés du tableau de résultat.
while (isset($equipes[++$i])) {
    $classement[$equipes[$i]] = 0; // On fixe le score par défaut (0 du moins normalement XD)
    $j = -1;
    while (isset($keys[++$j])) {
        $pos = strpos($keys[$j], $equipes[$i]); // On vérifie si le nom de l'équipe et dans la clé du match.
        if ($pos !== FALSE) {
            $temp = explode('-', $resultats[$keys[$j]]); // On "explose" le tiret du score pour obtenir les 2 résultats.
            if ((int) $temp[0] === (int) $temp[1]) $classement[$equipes[$i]] += 2; // Si les 2 scores sont identiques (match nul) on ajoute 2 points à l'équipe.
            elseif ($pos === 0 AND (int) $temp[0] > (int) $temp[1]) $classement[$equipes[$i]] += 4; // Si l'équipe est placée avant le tiret et que le nombre avant le tiret est supérieur (match gagné) on ajoute 4 points à l'équipe.
            elseif ($pos !== 0 AND (int) $temp[0] < (int) $temp[1]) $classement[$equipes[$i]] += 4; // Si l'équipe est placée après le tiret et que le nombre après le tiret est supérieur (match gagné) on ajoute 4 points à l'équipe.
        }
        if ($classement[$equipes[$i]] > $hight) $hight = $classement[$equipes[$i]]; // Si le score de l'équipe est meilleur que la variable "$hight" on remplace la variable par ce score.
    }
}

arsort($classement); // On trie le classement par ordre décroissant en conservant les clés.
$keys = array_keys($classement); // On prends toutes les clés du tableau de classement.
$i = -1;
while (isset($keys[++$i])) {
    // "$i+1" => Rang de l'équipe.
    // "$keys[$i]" => Nom de l'équipe.
    // "$classements[$keys[$i]]" => Score de l'équipe.
    // "$classement[$keys[$i]]-$hight" => Différence de points avec la première équipe.
    echo $i+1,' - ',$keys[$i],' - Différence de ',$classement[$keys[$i]]-$hight,"
\n";
}

?>

For every choice, a consequence (Fable)
Messages postés
67
Date d'inscription
mercredi 14 février 2007
Statut
Membre
Dernière intervention
22 mars 2009

Merci beaucoup !!

T'embete pas pour les equipes exaequo, on peut refaire un sort diff avant le sort points.

Merci !!!