Faire un classement par point !

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 : Faire un classement par point !

par Blustic » 11 oct. 2005, 12:26

Dsl meme pas j'ai pri le temps de chercher pff je suis ridicule alors que l'on a un moteur de recherche phénoménal

J'ai trouver pour le tri décroissant c'était arsort() :?

Par contre je n'arrive toujours pas pour le classement qu'il ne se fasse pas que sur le premier chiffre car j'ai des valeur qui peuvent allé jusqu' à 3 chiffres

Merci de votre aide

par Blustic » 11 oct. 2005, 12:21

Oui super
<?
$url = "point.txt"; 

//On récupère le contenu du fichier dans un tableau 
$a_file = file($url); 

//On parcours le contenu du fichier en mettant le nom dans le tableau et les points comme index 
$a_classement = array(); 
foreach ($a_file as $ligne) { 
    //On découpe la ligne récupérée selon le | 
    $a_ligne = explode("|", $ligne); 
     
    //le nom est le 1er element, les point le 2nd 
    $point = $a_ligne[1]; 
    $nom = $a_ligne[0]; 
     
    //On enregistre dans le tableau 
    $a_classement[$nom] = $point; 
} 

//On tri le tableau selon les valeurs(les points) 
asort($a_classement); 

//Ici un joli affichage mais tu peut faire l'écriture dans un fichier 
echo "<ol>"; 
foreach ($a_classement as $point => $nom) { 
echo "<li>".$nom." - ".$point." point(s)</li>"; 
} 
?>
Voila le code est ok

Mais le seul bémol c'est que pour le classement au nombre de point il classe en fonction du premier chiffre

Voici le classement que j'ai eu pendant mon test :

24 - Louise point(s)
3 - François point(s)
5 - Paul point(s)
54 - Marc point(s)

Et serait t'il possible de m'indiquer quel fonction dois-je changer pour avoir le classement décroissant je pense que c'est le asort() non ????

Merci d'avance

par zeus » 11 oct. 2005, 08:50

En faite ya juste 2 petites erreurs....

Un S en trop a $point et ... il manque un E a classement
J'ai honte :oops:
Je n'est pas validé le programme avant de le poster
F5, c'est pas dur à taper pourtant ...

Excuse moi blustic de t'embeter avec de la syntaxe alors que tu devrais réflechir sur l'algorithme

par Steffy » 11 oct. 2005, 08:24

En faite ya juste 2 petites erreurs....
foreach ($a_classment as $point => $nom) {
echo "<li>".$nom." - ".$points." point(s)</li>";
}
Un S en trop a $point et ... il manque un E a classement

par Truc » 10 oct. 2005, 22:28

Salut, verifi que le tableau n'est pas vide
$nb_elements = count ($a_classment);

par Cyrano » 10 oct. 2005, 22:26

foreach() va extraire les valeurs d'un tableau. la syntaxe peut donc être écrite comme suit:
foreach($tableau as $valeur)
{
    //...
}
Ce qui signifie en clair que la boucle va parcourir tout le contenu du tableau indexé ou associatif (tu fais la différence entre les deux ?) et en extraire chaque valeur. Les lignes d'instruction à chaque tour de boucle vont utiliser cette valeur.

Si j'ai par exemple le tableau suivant:
$tableau = array(1, 2, 3, 4, 5);
Je veux maintenant multiplier chaque valeur contenu par deux et les afficher. Je vais donc faire :
foreach($tableau as $nombre)
{
    echo("<p>". $nombre * 2 ."</p>\n");
}
Ce qui va me générer le code suivant:

Code : Tout sélectionner

<p>2</p> <p>4</p> <p>6</p> <p>8</p> <p>10</p>
Si je veux faire plus précis, je peux également extraire les clé, les index du tableau. Là, nous avons un tableau indexé, c'est à dire qu'il y a des index numériques automatiques à chaque ajoutd'une nouvelle valeur dans le tableau. Modifions notre boucle:
foreach($tableau as $index => $nombre)
{
    echo("<p>À l'index ". $index .", la valeur ". $nombre ." multipliée par 2 est égale à ". $nombre * 2 ."</p>\n");
}
Ce qui va générer le code:

Code : Tout sélectionner

<p>À l'index 0, la valeur 1 multipliée par 2 est égale à 2</p> <p>À l'index 1, la valeur 2 multipliée par 2 est égale à 4</p> <p>À l'index 2, la valeur 3 multipliée par 2 est égale à 6</p> <p>À l'index 3, la valeur 4 multipliée par 2 est égale à 8</p> <p>À l'index 4, la valeur 5 multipliée par 2 est égale à 10</p>
Est-ce que tu comprends mieux comme ça ?

par Blustic » 10 oct. 2005, 22:13

Comment ça tu peux etre plus précis stp car je comprens pas ce que tu veux dire.

Merci

par Cyrano » 10 oct. 2005, 21:06

À priori, la variable testée n'est pas un tableau, à vérifier.

par blustic » 10 oct. 2005, 21:04

Non c'est bon j'ai trouvé l'erreur il manquait un ; à la dernière ligne

Par contre il me met maintenant :

Invalid argument supplied for foreach() ligne 26

Tu sais d'ou sa vient ?

Merci

par blustic » 10 oct. 2005, 19:27

Quand vous dites index

Qu'est-ce que c'est ??

Merci

par blustic » 10 oct. 2005, 19:24

Merci,

J'étais contenté sur la ligne 14 je n'avais meme pas vu que c'était juste au dessus.

Ton code :
<?
$url = "fichier.txt"; 

//On récupère le contenu du fichier dans un tableau 
$a_file = file($url); 

//On parcours le contenu du fichier en mettant le nom dans le tableau et les points comme index 
$a_classement = array(); 
foreach ($a_file as $ligne) { 
    //On découpe la ligne récupérée selon le | 
    $a_ligne = explode("|", $ligne);
     
    //le nom est le 1er element, les point le 2nd 
    $point = $a_ligne[1]; 
    $nom = $a_ligne[0]; 
     
    //On enregistre dans le tableau 
    $a_classement[$point] = $nom; 
} 

//On tri le tableau selon les index (les points) 
ksort($a_classement); 

//Ici un joli affichage mais tu peut faire l'écriture dans un fichier 
echo "<ol>"; 
foreach ($a_classment as $point => $nom) { 
    echo "<li>".$nom." - ".$points." point(s)</li>"; 
} 
echo "</ol> 

?>
Indique :
Parse error: parse error, unexpected $ in /.../.../.../ma_page.php on line 31
Je ne vois pas pourquoi ligne 31 c'est la fin du script ?>

par zeus » 10 oct. 2005, 19:05

Sinon zeus je ne comprend pas trop ton code tu peux m'expliquer un peu je l'ai testé pour essayer de compendre mais il fait une erreur ligne 14.Merci
L'erreur, c'est que j'ai oublié un ; à la fin de cette ligne
$a_ligne = explode("|", $ligne);
Sinon, dit moi ce que tu ne comprend pas
Mais en cas d'égalité, tu remplaces le nom précédent par le nouveau
Bien joué

Dans ce cas, il faut mettre les noms en index et faire le tri sur les valeurs et non plus sur les clés. Mais en cas d'égalité, le 1er du fichier sera le 1er

Code corrigé et remarque de heddicmi intégrée
$url = "url du fichier";

//On récupère le contenu du fichier dans un tableau
$a_file = file($url);

//On parcours le contenu du fichier en mettant le nom dans le tableau et les points comme index
$a_classement = array();
foreach ($a_file as $ligne) {
    //On découpe la ligne récupérée selon le |
    $a_ligne = explode("|", $ligne);
    
    //le nom est le 1er element, les point le 2nd
    $point = $a_ligne[1];
    $nom = $a_ligne[0];
    
    //On enregistre dans le tableau
    $a_classement[$nom] = $point;
}

//On tri le tableau selon les valeurs(les points)
sort($a_classement);

//Ici un joli affichage mais tu peut faire l'écriture dans un fichier
echo "<ol>";
foreach ($a_classment as $nom=> $point) {
    echo "<li>".$nom." - ".$points." point(s)</li>";
}
echo "</ol>

par heddicmi » 10 oct. 2005, 18:22

Y a un truc que je saisis dans ta logique Zeus... Tu mets comme index les points... Mais en cas d'égalité, tu remplaces le nom précédent par le nouveau... ça ne me parait pas très judicieux...

par blustic » 10 oct. 2005, 18:15

Merci,

Mais les données je sais les rentrer dans un fichier texte ça c'est fait c'est juste pour les insérer dans un tableau et les trier par ordre décroissant

La base de données pourquoi pas mais je sais pas comment faire !

Sinon zeus je ne comprend pas trop ton code tu peux m'expliquer un peu je l'ai testé pour essayer de compendre mais il fait une erreur ligne 14.

Merci

par zeus » 10 oct. 2005, 17:56

Tiens, un exemple de code bidouillé vite fait

J'ai fait un affichage et pas une insertion dans un fichier mais si tu as compris l'idée, tu y arriveras tout seul
$url = "url du fichier";

//On récupère le contenu du fichier dans un tableau
$a_file = file($url);

//On parcours le contenu du fichier en mettant le nom dans le tableau et les points comme index
$a_classement = array();
foreach ($a_file as $ligne) {
    //On découpe la ligne récupérée selon le |
    $a_ligne = explode("|", $ligne)
    
    //le nom est le 1er element, les point le 2nd
    $point = $a_ligne[1];
    $nom = $a_ligne[0];
    
    //On enregistre dans le tableau
    $a_classement[$point] = $nom;
}

//On tri le tableau selon les index (les points)
ksort($a_classement);

//Ici un joli affichage mais tu peut faire l'écriture dans un fichier
echo "<ol>";
foreach ($a_classment as $point => $nom) {
    echo "<li>".$nom." - ".$points." point(s)</li>";
}
echo "</ol>