Trier un tableau - clé date

Résolu/Fermé
kitty - 16 avril 2013 à 12:00
 kitty - 17 avril 2013 à 11:42
Bonjour,

J'ai un tableau de la forme [16/04/2013]115 et j'aimerais le trier par clé.

Mon tableau commence le [16/03/2013] jusqu'à la date courant [16/04/2013]

J'utilise la fonction ksort();

mais il fait pas le trie comment je voudrais :

Le résultat avec la fonction :

Array
(
[01/04/2013] => 419
[02/04/2013] => 643
[03/04/2013] => 628
[04/04/2013] => 649
[05/04/2013] => 841
[06/04/2013] => 519
[07/04/2013] => 403
[08/04/2013] => 690
[09/04/2013] => 785
[10/04/2013] => 712
[11/04/2013] => 777
[12/04/2013] => 797
[13/04/2013] => 431
[14/04/2013] => 177
[15/04/2013] => 813
[16/03/2013] => 316
[16/04/2013] => 111
[17/03/2013] => 278
[18/03/2013] => 452
[19/03/2013] => 579
[20/03/2013] => 582
[21/03/2013] => 610
[22/03/2013] => 589
[23/03/2013] => 393
[24/03/2013] => 361
[25/03/2013] => 592
[26/03/2013] => 891
[27/03/2013] => 696
[28/03/2013] => 559
[29/03/2013] => 609
[30/03/2013] => 430
[31/03/2013] => 333
)


ce que je veux :

Array
(
[16/03/2013] => 316
[17/03/2013] => 278
[18/03/2013] => 452
[19/03/2013] => 579
[20/03/2013] => 582
[21/03/2013] => 610
[22/03/2013] => 589
[23/03/2013] => 393
[24/03/2013] => 361
[25/03/2013] => 592
[26/03/2013] => 891
[27/03/2013] => 696
[28/03/2013] => 559
[29/03/2013] => 609
[30/03/2013] => 430
[31/03/2013] => 333
[01/04/2013] => 419
[02/04/2013] => 643
[03/04/2013] => 628
[04/04/2013] => 649
[05/04/2013] => 841
[06/04/2013] => 519
[07/04/2013] => 403
[08/04/2013] => 690
[09/04/2013] => 785
[10/04/2013] => 712
[11/04/2013] => 777
[12/04/2013] => 797
[13/04/2013] => 431
[14/04/2013] => 177
[15/04/2013] => 813
[16/04/2013] => 111
)
A voir également:

7 réponses

Utilisateur anonyme
16 avril 2013 à 12:23
Salut,

En fait ksort trie tes valeurs comme des entiers, il est donc logique que pour lui 31/03/2013 est supérieur à 01/04/2013 (31 032 013 > 01 042 013 ).

Il y a surement différentes astuces, mais ce que tu peux faire c'est inverser le format pour le trie :
Si tu met année/mois/jour les dates les plus récentes seront les plus grandes :
2013/03/31 < 2013/04/01 , car 20 130 331 < 20 130 401 et ton tableau sera triée de la date la plus ancienne (i=0) , à la plus récente.
0
Le problème est que je dois conserver le format jour/mois/année :(
0
Utilisateur anonyme
16 avril 2013 à 12:38
Mouai,

Ben y a d'autres idées tu peux faire une fonction qui compare d'abord la date puis le mois et enfin le jour pour savoir ou insérer la date, mais c'est laborieux.

Ou sinon t'inverse le format des date, tu trie avec ksort et tu ré-inverse le format des clés.
0
j'essayé avec ksort($array, SORT_STRING); mais ça n'a pas marché.

Je ne connais trop le langage php, peux-tu m'aider ? comment je peux inverser les dates?

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
16 avril 2013 à 13:02
salut,

tes données viennent d'une base de données ?

Si tu as des manipulations à faire sur ton champs date, il est conseillé de stocker la valeur sous un type date ou un timestamp.

Tu as besoin de conserver ce format pour quoi faire ? Si c'est uniquement pour un affichage, tu peux convertir le timestamp en format date de ton choix au moment de l'affichage et de cette façon, pas de soucis de tri.
0
oui ils viennent de la base de données et pourquoi j'ai besoin de ce tableau avec la clé d/m/y ?

parce que ce n'est pas un simple affichage, je dois utiliser ce tableau pour faire un graphique avec JPGraph et le tableau doit avoir ce format.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
16 avril 2013 à 14:00
Et dans la base, le champ date est sous cette forme ?

En tout cas, une chose est certaine, tu ne pourras pas faire de tri si tu gardes ton tableau comme ça.
0
il a le format d-m-Y, j'utilise un explode pour changer les '-' par '/'
0
Merci @kysersoze j'ai résolu mon pb. Comment je n'ai pas trouvé un autre solution j'ai inverse le format des clés, les trie avec ksort et ré-inverse le format des clés.

Voilà le code.

 foreach ($result as $date => $value) {
            $d = explode("/", $date);
            $newdate = $d[2] . "/" . $d[1] . "/" . $d[0];
            $tab_aux[$newdate] = $value;
        }

        ksort($tab_aux);
        foreach ($tab_aux as $date => $value) {
            $d = explode("/", $date);
            $newdate = $d[2] . "/" . $d[1] . "/" . $d[0];
            $this->array_visit_[$newdate] = $value;
        }
0