recherche un script de classement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : recherche un script de classement

recup de variables dans un tableau

par fila » 06 mars 2006, 14:17

Bonjour !

C'est effectivement cela !
Merci par avance

par Cyrano » 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 ?

array

par fila » 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+

Re: donnees issues de la base

par Cyrano » 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.

donnees issues de la base

par fila » 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:

par Cyrano » 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.

recherche un script de classement

par fila » 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+