Trier plusieurs tableaux multi-dimensionnels

Trier plusieurs tableaux multi-dimensionnels - PHP - Programmation

Marsh Posté le 09-06-2004 à 09:09:18    

Salut à tous,  
 
Depuis un moment j'ai fait un site web sur l'équipe suisse de foot et j'ai fait un classement pour l'euro ...  
(un peu de pub, oui  :non:  http://passionsuisse.free.fr  :non: )  
 
Non, revenant-on au fait...  
 
Moi j'ai fait une table avec mes équipes (Suisse, France, Croatie, Angleterre). Ensuite une table pour les match (Date, Stade, etc ...) et ensuite une pour les résultats (N° match, buteur, minute, etc ...).  
Maintenant, affiche toutes ces infos, c'est facile  
 
Il me reste un point, classer pas ordre de points  
 
J'ai fait un tableau 2D :
 
$Pays[Suisse][MJ] (matchs joués)
$Pays[Suisse][V] (victoires)
$Pays[Suisse][PTS] (points)
etc ...
le même pour les autres équipes !
 
en somme g quatre tableaux, Suisse, France, Croatie, Angleterre !
$Pays[Suisse], $Pays[France], $Pays[Croatie], $Pays[Angleterre].
 
et chacun a : [MJ], [V], [N], [D], [BC], [BP], [PTS] ...
 
Voilà !
Ensuite j'aimerais bien trier ces tableaux par ordre décroissant de points ! Faire le classement quoi !
Comment fait-on ?
 
J'ai d'abord eu l'idée d'insérer cela dans une base, faire un UPDATE. Mais cela fera cette opération chaque fois qu'un utilisateur actualisera la page, donc pas très pratique en terme de fluidité, non ?
 
Ou alors j'ai aussi vu la fonction, array_multisort(SORT_DESC);
Mais bon, c'est pour un seul tableau !!
 
Merci beaucoup  :love:

Reply

Marsh Posté le 09-06-2004 à 09:09:18   

Reply

Marsh Posté le 09-06-2004 à 09:48:38    

Code :
  1. <?php
  2. function cmp($a, $b) {
  3.    if ($a['PTS'] == $b['PTS']) {
  4.        return 0;
  5.    }
  6.    return ($a['PTS'] < $b['PTS']) ? -1 : 1;
  7. }
  8. usort($Pays, "cmp" );
  9. ?>


 
Il faut faire appel à une fonction utilisateur.
Si tu comprends pas le code ci-dessus dis-moi (http://fr2.php.net/manual/en/function.usort.php).


Message édité par ratibus le 09-06-2004 à 09:49:53
Reply

Marsh Posté le 09-06-2004 à 10:17:42    

Code :
  1. <?php
  2. function cmp($a, $b) {
  3.    if ($a['PTS'] == $b['PTS']) {
  4.        return 0;
  5.    }
  6.    return ($a['PTS'] < $b['PTS']) ? -1 : 1;
  7. }
  8. usort($Pays, "cmp" );
  9. ?>


 
Merci ;-)
 
Dans ce code que tu ma donné, le pige pas trop la ligne return avec le "? -1"  :pt1cable:  
Sa veut dire que si $a[PTS] est égal a $b[PTS], il retournera 0 et sinon il retourne quoi ?
1 ou -1 ?
 
Merci  :hello:

Reply

Marsh Posté le 09-06-2004 à 10:47:06    

Code :
  1. return ($a['PTS'] < $b['PTS']) ? -1 : 1;


Si $a['PTS'] < $b['PTS'] ca te retournera -1, sinon 1
c'est l'équivalent d'un If mais en une ligne :  
[condition] ? [sivrai] : [sifaux]

Reply

Marsh Posté le 09-06-2004 à 11:13:46    

C'est l'opérateur ternaire :  
The expression (expr1) ? (expr2) : (expr3) evaluates to expr2 if expr1 evaluates to TRUE, and expr3 if expr1 evaluates to FALSE.  
 
source(http://fr.php.net/manual/en/language.operators.comparison.php)

Reply

Marsh Posté le 09-06-2004 à 11:19:06    

Aaaaaaaaaah bon !
 
Mhh intéressant, merci ;-)
 
J'espère pouvoir y arriver ...

Reply

Marsh Posté le 09-06-2004 à 11:19:50    

apparement l'opérateur ternaire cai mal (en tout cas moins rapide que le if)
 
http://forum.hardware.fr/hardwaref [...] tm#t744486

Reply

Marsh Posté le 09-06-2004 à 11:56:25    

Tu gagnes 5ms sur 10000 itérations :D
Je pense que c'est pas essentiel comme optimisation.
Perso j'utilise l'opérateur ternaire.

Reply

Marsh Posté le 09-06-2004 à 12:16:05    

ratibus a écrit :

Tu gagnes 5ms sur 10000 itérations :D
Je pense que c'est pas essentiel comme optimisation.
Perso j'utilise l'opérateur ternaire.


 
eh mais ca fait quand meme 0.0005ms alors...
ben c pas négligeable.
ah tiens si...  :D  
naan mais j'aime pas la syntaxe je trouve que ca pourri le code en plus

Reply

Marsh Posté le 09-06-2004 à 13:31:33    

Question d'habitude je pense :)

Reply

Marsh Posté le 09-06-2004 à 13:31:33   

Reply

Marsh Posté le 09-06-2004 à 14:14:05    

vu le type de données utilisées, les tables doivent pas être très remplies ...
 
donc une requête SQL peut renvoyer le résultat déjà bien formaté rapidement :)
 
Je précise bien que ce n'est pas nécessaire, le tableau déjà rempli permet de le faire, mais franchement, si le volume de données est faible ... l'écriture de la requête prend 5 minutes :)

Reply

Marsh Posté le 09-06-2004 à 18:19:47    

Trie a bulle  :o


---------------
in vinus veritas
Reply

Marsh Posté le 09-06-2004 à 19:36:16    

En effet, Beegee, je vais faire un p'tit update facile qui prend peu de temps ...
Je suis trop fatigué et trop dépité pour imaginer ma série de test dans une fonction  :pt1cable:  
 
Merci encore à tous pour avoir éclairer ma lanterne éteinte  ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed