recherche un script de classement

Eléphanteau du PHP | 25 Messages

05 mars 2006, 08:42

Salut !

Je cherche un script de classement ou un tuto qui gere les exequo, je voulais le faire avec Mysql mais apparement ce n'est pas possible
Merci par avance car cela m'avancerait enormement.
Je sais faire avec une requete et une variable qui s'incrementerait a chaque ligne de mon tableau, mais je ne pourrais jamais avoir d'exequo :o

A+

Mammouth du PHP | 19672 Messages

05 mars 2006, 10:51

Ok, on va y aller par étapes.

Pour commencer, créons un tableau à deux dimensions stockat des prénoms et des points :
<?php
/* Prenons un tableau comportant une liste de prénoms et de points */
$liste = array("prenom" => array("Jean", "Pierre", "Robert", "Jacques", "Sylvain"), "points" => array(12, 25, 16, 8, 16));
/* Premier affichage */
?>
<pre>
<?php
var_dump($liste);
?>
</pre>
L'affichage du tableau non trié donne ceci :

Code : Tout sélectionner

array(2) { ["prenom"]=> array(5) { [0]=> string(4) "Jean" [1]=> string(6) "Pierre" [2]=> string(6) "Robert" [3]=> string(7) "Jacques" [4]=> string(7) "Sylvain" } ["points"]=> array(5) { [0]=> int(12) [1]=> int(25) [2]=> int(16) [3]=> int(8) [4]=> int(16) } }
Avec la fonction array_multisort(), trions ce tableau :
<?php
/* On doit commencer par classer ce tableau selon les points dans l'ordre décroissant */
array_multisort($liste['points'], SORT_DESC, SORT_NUMERIC, 
                $liste['prenom'], SORT_ASC, SORT_STRING);
/* Affichage après le tri */
?>
<pre>
<?php
var_dump($liste);
?>
</pre>
L'affichage de contrôle donne ceci:

Code : Tout sélectionner

array(2) { ["prenom"]=> array(5) { [0]=> string(6) "Pierre" [1]=> string(6) "Robert" [2]=> string(7) "Sylvain" [3]=> string(4) "Jean" [4]=> string(7) "Jacques" } ["points"]=> array(5) { [0]=> int(25) [1]=> int(16) [2]=> int(16) [3]=> int(12) [4]=> int(8) } }
Les données sont maintenant classées dans le bon ordre, il ne reste qu'à les afficher dans un tableau en ajoutant le classement correspondant: nous avons deux ex-aequo à la deuxième place. Pour gérer ça et repartir ensuite sur 4 et non trois, on va créer des variables de stockage temporaire et utiliser le pointeur de la boucle for() utilisée pour parcourir le tableau $liste.
<?php
/* Nous allons maintenant afficher en ajoutant un classement tenant compte des exaequos. */
?>
<table summary="">
  <tr>
    <th><p>Classement</p></th>
    <th><p>Prénom</p></th>
    <th><p>Points</p></th>
  </tr>
<?php
/* On commence par compter le nombre de candidats au classement */
$nb = count($liste['prenom']);
/**
 * On crée deux variables : 
 *  - une variable de stockage temporaire du nombre de points : cette variable va 
 *    servir à déterminer si on doit incrémenter le classement ou non
 *  - Un seconde pour stocker le classement
 */
$pt = 0;
$cl = 0;
for($i = 0; $i < $nb; $i++)
{
    /* Si le nombre de points est différent de $pt, on incrémente $cl par
       rapport au pointeur de la boucle for() et on modifie la valeur de $pt */
    if($liste['points'][$i] != $pt)
    {
        $cl = $i + 1;
        $pt = $liste['points'][$i];
    }
?>
  <tr>
    <td><p><?php echo($cl); ?></p></td>
    <td><p><?php echo($liste['prenom'][$i]); ?></p></td>
    <td><p><?php echo($liste['points'][$i]); ?></p></td>
  </tr>
<?php
}
?>
</table>
Ce qui va me donner le tableau suivant :

Code : Tout sélectionner

+------------+------------+----------+ | Classement | Prénom | Points | +------------+------------+----------+ | 1 | Pierre | 25 | | 2 | Robert | 16 | | 2 | Sylvain | 16 | | 4 | Jean | 12 | | 5 | Jacques | 8 | +------------+------------+----------+
Voilà, est-ce que tu comprends le fonctionnement de tout ceci ? Le moins simple à saisir, c'est l'utilisation de array_multisort(), le reste, c'est juste de la logique.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

05 mars 2006, 13:01

Bonjour et merci pour ce cours qui est super ! Mais je ne vois pas comment extraire mes donnees de ma base, faut-il que je les rentre dans un tableau stp? :oops:
Merci par avance !
ps. quand j'aurais bien assimilé tout ceci, cela va me retirer une grosse epine du pied ! Surtout quand j'apprends plein de trucs ! :lol:

Mammouth du PHP | 19672 Messages

05 mars 2006, 17:39

...je ne vois pas comment extraire mes donnees de ma base...
Effectivement, c'est un handicap majeur.

Il faut commencer par définir la requête qui va extraire les données voulues, ce que faisant, tu auras éventuellement un premier tri qui pourra être fait directement lors de la requête.

Il faut ensuite te connecter à ton serveur de base de données, sélectionner la base, exécuter la requête et récupérer les information retournées.

Alors il existe plein de tutos tout prêts pour en comprendre le fonctionnement de base, sur phpdebutant par exemple

Ensuite, il faudra stocker ces résultats dans un tableau (array), mais ce n'est pas la partie la plus complexe. Reviens avec des questions sur des points précis sur lesquels tu butes éventuellement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

05 mars 2006, 19:30

Excuse-moi tout ce que tu decris je sais le faire :oops: (je me suis mal explique encore) c'est pour juste les faire rentrer dans un tableau .
A+

Mammouth du PHP | 19672 Messages

05 mars 2006, 19:39

Donc si je reformule ta question, ce serait plutôt : comment stocker dans un tableau indexé les informations retournées par une requête SQL ? Est-ce que c'est bien ça ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 25 Messages

06 mars 2006, 14:17

Bonjour !

C'est effectivement cela !
Merci par avance