Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2608 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Php, classement tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Php, classement tableau

n°1866679
huy15
Posté le 27-03-2009 à 14:00:18  profilanswer
 

Bonjour,  
 
J'ai un tableau comme ceci que je souhaite trier dans l'ordre décroissant puis faire un classement numéroté 1,2,3,..
 
J'ai essayé avec array_multisort mais ca ne me donne pas le bon tri.
 

Code :
  1. $score[$i][$nom]['points']=$total;
  2. array_multisort($score, SORT_NUMERIC, SORT_DESC);
  3. print_r($score);


 
J'ai obtenu ceci:  
Array ( [0] => Array ( [Pa] => Array ( [points] => 1 ) ) [1] => Array ( [To] => Array ( [points] => 4 ) ) [2] => Array ( [Ca] => Array ( [points] => 5 ) ) [3] => Array ( [Ma] => Array ( [points] => 0 ) ) )
 
ET j'ai un message d'erreur lorsque je tente de réaliser un classement:  
 

Code :
  1. $b=count($score);
  2. for($a = 1; $a = $b; $a++) {
  3.  $score[$i][$nom]=$a;}


 
 
Comment puis je  faire un classement ?
 
Merci d'avance

mood
Publicité
Posté le 27-03-2009 à 14:00:18  profilanswer
 

n°1866795
gabouel
Posté le 27-03-2009 à 18:06:12  profilanswer
 

Si je capte bien, tu veux trier tes $noms en fonction de leurs points ?
 
Si c'est le cas, le tri de la 2ème dimension dépend de la 3ème et donc le multisort ne peut pas t'aider.
Ceci-dit, je ne suis pas complètement certain de la judicieusité d'un tableau à 3 dimensions pour ce que tu veux faire.
 
Une solution pas très propre avec ton tableau à 3 dimensions:
 

Code :
  1. $tmp = array();
  2. foreach($score as $k1 => $lvl_1_arr)
  3. {
  4.  foreach($lvl_1_arr as $nom => $nom_arr)
  5.  {
  6.     $tmp[str_pad($nom_arr['points'], 20, '0', STR_PAD_LEFT).$nom.$k1] = array('nom' => $nom, 'points' => $nom_arr['points']);
  7.  }
  8. }
  9. krsort($tmp);
  10.  
  11. $i = 1;
  12. foreach($tmp as $arr)
  13. {
  14.  echo $i.' position: '.$arr['nom'].' ('.$arr['points'].')<br />';
  15.  $i++;
  16. }


 
Sinon, en 1 dimension:
 

Code :
  1. $score = array();
  2.  
  3. while($on_a_des_scores_a_mettre)
  4. {
  5.  $score[$id_unique_du_joueur] = array('id' => $id_unique_du_joueur', 'nom' => $nom, 'points' => $points');
  6. }
  7.  
  8. $r = array();
  9. foreach($score as $id => $arr)
  10. {
  11.  $r[$id] = $arr['points'];
  12. }
  13. asort($r);
  14.  
  15. $i = 1;
  16. foreach($r as $id => $points)
  17. {
  18.  echo $i.' position: '.$score[$id]['nom'].' ('.$score[$id]['points'].')<br />';
  19.  $i++;
  20. }


 
C'est évidemment TRES TRES optimisable (par exemple en utilisant la PHP SPL http://fr3.php.net/spl  )


---------------
http://www.gabouel.com
n°1866805
huy15
Posté le 27-03-2009 à 18:42:42  profilanswer
 

Bonjour,  
 
Merci de m'avoir répondu, je vais essayer votre code.  
En effet, j'aimerais trier les noms en fonction des points et les classer, tableau donc à une dimension:  
$score[$nom]=$total;
Je n'ai pas bien compris la solution à 1 dimension lorsque vous mettez:  
$score = array();
while($on_a_des_scores_a_mettre)
{
 $score[$id_unique_du_joueur] = array('id' => $id_unique_du_joueur', 'nom' => $nom, 'points' => $points');
}
et si dans le cas de l'égalité des points entre deux équipes, la différence de buts détermine le classement, j'aurai deux dimensions?
$score[$nom]=$diffbut;
 
Merci beaucoup

n°1866859
huy15
Posté le 27-03-2009 à 21:53:10  profilanswer
 

Bonsoir,  
 
La solution du tableau à 3 dimensions fonctionne. Merci beaucoup. Je n'ai pas réussi à faire avec celle d'une dimension.  
 
J'aimerais savoir en cas d'égalité des points comment trier en sorte que la différence de buts détermine le rang  
différence de buts= buts marqués-buts encaissés
 
Si équipe A et B ont toutes les deux 5 points,  
Diff de buts A = -3
diff de buts B= -5  
alors A est classé avant B
 
Je vous remets le code avec la différence de buts:  

Code :
  1. $tmp = array();
  2.       foreach($score as $k1 => $lvl_1_arr)
  3.       {
  4.        foreach($lvl_1_arr as $nom => $nom_arr)
  5.        {
  6.           $tmp[str_pad($nom_arr['points'], 20, '0', STR_PAD_LEFT).$nom.$k1] = array('nom' => $nom, 'points' => $nom_arr['points'], 'diffbut' => $nom_arr['diffbut']);
  7.        }
  8.       }
  9.       krsort($tmp);
  10. $i = 1;
  11.       foreach($tmp as $arr)
  12.       {
  13.   ?><tr><td><?php
  14.        echo $i.' '.$arr['nom'];
  15.    ?></td><td><?php
  16.    echo $arr['points'];
  17.    ?></td><td><?php
  18.    echo $arr['diffbut'];
  19.    ?></td></tr><?php
  20.        $i++;
  21.       }


 
Merci beaucoup


Message édité par huy15 le 31-03-2009 à 00:29:52
n°1867746
huy15
Posté le 31-03-2009 à 00:38:33  profilanswer
 

Bonsoir,  
 
Quelqu'un aurait il une idée?
 
Merci d'avance


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Php, classement tableau

 

Sujets relatifs
Salut !! PHP Windows IISS (probleme de script)tableau sérialisé en PHP
colorer bordure tableau htmlDifférence entre pointeur et tableau, allocation dynamique et statique
[Résolu] Cacher, afficher une ligne de tableau <TR> en JavascriptCréer un formulaire PHP qui renvoie les données en Excel
[PHP] Varaibles de sessions et classes[PHP] utiliser le moteur de joomla pour faire une application.
Afficher le symbole € (euro) avec librairie GD PHP 
Plus de sujets relatifs à : Php, classement tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR