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

  FORUM HardWare.fr
  Programmation
  PHP

  Trier plusieurs tableaux multi-dimensionnels

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trier plusieurs tableaux multi-dimensionnels

n°757450
jkleteubet
Posté le 09-06-2004 à 09:09:18  profilanswer
 

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:

mood
Publicité
Posté le 09-06-2004 à 09:09:18  profilanswer
 

n°757483
ratibus
Posté le 09-06-2004 à 09:48:38  profilanswer
 

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
n°757532
jkleteubet
Posté le 09-06-2004 à 10:17:42  profilanswer
 

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:

n°757573
Profil sup​primé
Posté le 09-06-2004 à 10:47:06  answer
 

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]

n°757630
ratibus
Posté le 09-06-2004 à 11:13:46  profilanswer
 

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)

n°757635
jkleteubet
Posté le 09-06-2004 à 11:19:06  profilanswer
 

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

n°757636
hop le fou
Tu m'en diras tant
Posté le 09-06-2004 à 11:19:50  profilanswer
 

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

n°757682
ratibus
Posté le 09-06-2004 à 11:56:25  profilanswer
 

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

n°757708
hop le fou
Tu m'en diras tant
Posté le 09-06-2004 à 12:16:05  profilanswer
 

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

n°757766
ratibus
Posté le 09-06-2004 à 13:31:33  profilanswer
 

Question d'habitude je pense :)

mood
Publicité
Posté le 09-06-2004 à 13:31:33  profilanswer
 

n°757840
Beegee
Posté le 09-06-2004 à 14:14:05  profilanswer
 

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 :)

n°758319
jerume
in vinus veritas
Posté le 09-06-2004 à 18:19:47  profilanswer
 

Trie a bulle  :o


---------------
in vinus veritas
n°758364
jkleteubet
Posté le 09-06-2004 à 19:36:16  profilanswer
 

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  ;)


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

  Trier plusieurs tableaux multi-dimensionnels

 

Sujets relatifs
Multi insertionnom de tableaux
envoi mail a plusieurs adresses[PHP/MySQL] - Afficher plusieurs nom d'un champs qu'une ... (RESOLU)
HTML/Tableaux Entête de tableau fixe / ascenseurs[access] probleme de requete avec plusieurs parametres .....
[access] comment faire une requête avec plusieurs paramètres ??Problème de fichiers / tableaux [RESOLU]
multi-concatenationfaire plusieurs requetes dans une query ?
Plus de sujets relatifs à : Trier plusieurs tableaux multi-dimensionnels


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