Page 1 sur 1

recherche un script de classement

Posté : 05 mars 2006, 08:42
par fila
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+

Posté : 05 mars 2006, 10:51
par Cyrano
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.

donnees issues de la base

Posté : 05 mars 2006, 13:01
par fila
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:

Re: donnees issues de la base

Posté : 05 mars 2006, 17:39
par Cyrano
...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.

array

Posté : 05 mars 2006, 19:30
par fila
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+

Posté : 05 mars 2006, 19:39
par Cyrano
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 ?

recup de variables dans un tableau

Posté : 06 mars 2006, 14:17
par fila
Bonjour !

C'est effectivement cela !
Merci par avance