Classement automatique

Résolu
wadpap13 Messages postés 67 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 22 mars 2009 - 27 juin 2007 à 11:57
wadpap13 Messages postés 67 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 22 mars 2009 - 27 juin 2007 à 14:27
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

audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
27 juin 2007 à 14:09
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)
3
wadpap13 Messages postés 67 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 22 mars 2009
27 juin 2007 à 14:27
Merci beaucoup !!

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

Merci !!!
0
Rejoignez-nous