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

  FORUM HardWare.fr
  Programmation
  PHP

  Trier un tableau à double dimension ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trier un tableau à double dimension ?

n°1556435
weed
Posté le 07-05-2007 à 11:55:50  profilanswer
 

Comment peut on trier un tableau à double dimension en fonction d'un seul champs uniquement.  
 
J'ai regardé la fonction array_multisort, mais malheuresement cela ne repond pas à mon besoin.
 
Voici un exemple pour vous montrer ce que je veux obtenir. Je veux trier mon tableau en fonction du champ libelle.
 
 
Tableau non triée :
 

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [date] => 2007-04-19 20-04-57
  6.             [libelle] => Appel
  7.             [destination] => 067627154
  8.             [montant] => -0.026 €
  9.             [compte] => 30j
  10.             [duree] => 6
  11.         )
  12.     [1] => Array
  13.         (
  14.             [date] => 2007-04-19 19-57-40
  15.             [libelle] => SMS
  16.             [destination] => 061459952
  17.             [montant] => -1.267 €
  18.             [compte] => 30j
  19.             [duree] => 288
  20.         )
  21.     [2] => Array
  22.         (
  23.             [date] => 2007-04-16 19-56-45
  24.             [libelle] => Appel
  25.             [destination] => 067627154
  26.             [montant] => -0.031 €
  27.             [compte] => 30j
  28.             [duree] => 7
  29.         )
  30. )


 
 
 
Tableau tréi en fonction du libelle.  

Code :
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [date] => 2007-04-19 20-04-57
  6.             [libelle] => Appel
  7.             [destination] => 067627154
  8.             [montant] => -0.026 €
  9.             [compte] => 30j
  10.             [duree] => 6
  11.         )
  12.     [1] => Array
  13.         (
  14.             [date] => 2007-04-16 19-56-45
  15.             [libelle] => Appel
  16.             [destination] => 067627154
  17.             [montant] => -0.031 €
  18.             [compte] => 30j
  19.             [duree] => 7
  20.         )
  21.     [2] => Array
  22.         (
  23.             [date] => 2007-04-19 19-57-40
  24.             [libelle] => SMS
  25.             [destination] => 061459952
  26.             [montant] => -1.267 €
  27.             [compte] => 30j
  28.             [duree] => 288
  29.         )
  30. )

mood
Publicité
Posté le 07-05-2007 à 11:55:50  profilanswer
 

n°1556436
skeye
Posté le 07-05-2007 à 11:58:41  profilanswer
 

usort.


---------------
Can't buy what I want because it's free -
n°1556466
weed
Posté le 07-05-2007 à 13:28:17  profilanswer
 

ca fonctionne du tonnerre, merci  
 
 
function compare ($a, $b)
{
 if ($a["libelle"] < $b["libelle"])
  return -1;
 else
  return 1;
 
 
}
usort($tab, "compare" );
 
 

n°1565297
weed
Posté le 25-05-2007 à 16:45:18  profilanswer
 

Bonjour,

 

J'aimerais faire un tri par libelle, puis par date.

 

Comment faire ?

 

J'ai essayer de faire dans un premier temps, un tri par libelle :

 

Code :
  1. function compare ($a, $b)
  2. {
  3.  if ($a["libelle"] < $b["libelle"])
  4.   return -1;
  5.  else
  6.   return 1;
  7. }
  8. usort($input, "compare" );
 

puis je fais mon tri par date des enregistrements qui ont un meme libelle.
 

Code :
  1. function compare2 ($a, $b)
  2. {
  3.  if ($a["libelle"] == $b["libelle"])
  4.  {
  5.   if($a["date"] < $b["date"])
  6.    return 1;
  7.   else
  8.    return -1;
  9.  }
  10.  else
  11.   return 0;
  12. }
  13. usort($input, "compare2" );
 

mais cela ne fonctionne pas

Message cité 1 fois
Message édité par weed le 25-05-2007 à 16:45:38
n°1565307
soju
One shot !
Posté le 25-05-2007 à 16:59:48  profilanswer
 

weed a écrit :

mais cela ne fonctionne pas

forcément il te manque la comparaison des libelles lorsqu'ils ne sont pas égaux

n°1565310
weed
Posté le 25-05-2007 à 17:04:05  profilanswer
 

et bien si les libelles sont differents, il ne faut pas faire de tri. Je retourne donc 0 dans compare2.
 
Ca ne te parait pas correct comme principe ?

n°1565314
soju
One shot !
Posté le 25-05-2007 à 17:06:50  profilanswer
 

ha tu utilises les 2 fonctions à la suite, je n'avais pas capté...
une seule fonction 'compare' suffit
 

n°1565320
skeye
Posté le 25-05-2007 à 17:14:12  profilanswer
 

wala, une seule fonction, et tu traites tous les cas dans la même. Sinon tu tries 2 fois avec des critères différents.:o


Message édité par skeye le 25-05-2007 à 17:14:34

---------------
Can't buy what I want because it's free -
n°1565326
weed
Posté le 25-05-2007 à 17:20:44  profilanswer
 

Euhhh comment ca, il faut dans un premier temps trier par libelle puis une fois la première faite il faut trier par date.
 
mais je ne vois pas comment on peux trier en 1 seule passe.

n°1565341
skeye
Posté le 25-05-2007 à 17:29:52  profilanswer
 

weed a écrit :

Euhhh comment ca, il faut dans un premier temps trier par libelle puis une fois la première faite il faut trier par date.

 

mais je ne vois pas comment on peux trier en 1 seule passe.

 

Tu réfléchis pas assez.:o

 

[du code faux]


Message édité par skeye le 25-05-2007 à 17:37:04

---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 25-05-2007 à 17:29:52  profilanswer
 

n°1565347
skeye
Posté le 25-05-2007 à 17:35:40  profilanswer
 

(si les libellés sont identiques, ça ne veut pas dire que tes éléments sont égaux, ça veut dire que tu dois passer au critère de tri suivant.:o)


Message édité par skeye le 25-05-2007 à 17:35:50

---------------
Can't buy what I want because it's free -
n°1565353
skeye
Posté le 25-05-2007 à 17:39:44  profilanswer
 

Tiens, teste ça pour voir:

Code :
  1. function compare ($a, $b)
  2. {
  3.  if ($a["libelle"] < $b["libelle"]){
  4.    return -1;
  5.  }
  6.  else{
  7.    if ($a["libelle"] == $b["libelle"])
  8.      {
  9.     if($a["date"] < $b["date"])
  10.       return 1;
  11.     else{
  12.       if($a["date"] > $b["date"]){      
  13.         return -1;
  14.       }
  15.       else{
  16.         return 0;
  17.       }
  18.     }
  19.    else
  20.      return 1;
  21.      }
  22.  }
  23. }


Message édité par skeye le 25-05-2007 à 17:40:52

---------------
Can't buy what I want because it's free -
n°1565373
weed
Posté le 25-05-2007 à 17:55:25  profilanswer
 

ca a l'air de fonctionner ton 2ème code. Je vais reflechir un peu plus tard comment tu as fais.

n°1565394
skeye
Posté le 25-05-2007 à 18:16:22  profilanswer
 

weed a écrit :

ca a l'air de fonctionner ton 2ème code. Je vais reflechir un peu plus tard comment tu as fais.


J'ai fait exactement ce pour quoi la fonction passée à usort est faite : j'ai trié 2 éléments l'un par rapport à l'autre, en traitant tous les cas.:o


---------------
Can't buy what I want because it's free -

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

  Trier un tableau à double dimension ?

 

Sujets relatifs
Remplir une cellule de tableau avec un div[C#] Recherche dans un tableau
[JSP] créer tableau dynamique en servletinsertion dans un tableau
Problème avec la fonction avg en double jointurePb pour désérialiser un double tableau
alignement vertical cellules html [tableau]Pseudo tableau en CSS
[C]Remplir un tableau d'entiers uniques aléatoirement 
Plus de sujets relatifs à : Trier un tableau à double dimension ?


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