IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Trier des données d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut [Tableaux] Trier des données d'un tableau
    bonjour a tous, j'aimerais trier mes clés par un ordre (DEsc ou ASC)
    Mes clés sont des dates au format date time :

    C'est pour afficher les derniers ou premiers articles selon la catégories.
    je fais 3 selects, je les mets dans un tableau, puis merge...
    Il est hors de question de faire une seule requete, je ne peux pas techniquement.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Array
    (
        [2007-05-07 15:13:20] => Array
            (
                [ID] => 1970
                [DATE] => 2007-05-07 15:13:20
                [TYPE] => Video
            )
     
        [2007-05-07 15:05:18] => Array
            (
                [ID] => 80306
                [DATE] => 2007-05-07 15:05:18
                [TYPE] => Article
            )
     
        [2007-05-07 15:16:40] => Array
            (
                [ID] => 28497
                [DATE] => 2007-05-07 15:16:40
                [TYPE] => Musique
            )
     
    )

    j'ai essayé la fonction array_ multisort, mais ca me retourne 1.
    Comment pourrais faire ? une autre foreach pour reclasser ?

  2. #2
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    Salut array_ multisort retourne un boolean. Le tableau est directement modifé
    donc utilise var_dump pour voir si le resultat est correct.

  3. #3
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    merci pour ta réponse.

    j'ai essayé tous les parametres possible de multisort.
    Meme avec array_multisort($tab2,SORT_DESC ,SORT_REGULAR);
    C'est toujours des résultats différents

    peut on se fier à l'ordre d'un datetime ?

  4. #4
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    C'est une tres bonne question, sinon une idee pour tester, utilise la fonction array_keys. Ensuite tu tries le tableau de resultat et en l'affichant tu verras si c'est bien trié.

    Edit : En y repensant, tu pourrais meme utiliser ce tableau de clé pour ton tri final.

  5. #5
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    j'ai voulu me simplifier la vie en mettant un timestamp a la place du datetime, pour faire un ordre plus facile.

    mes tableaux sont correct, mais le merge ne va pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Array
    (
        [1178543600] => Array
            (
                [ID] => 1970
                [DATE] => 2007-05-07 15:13:20
                [TYPE] => Vidéo
            )
     
    )
     
    Array
    (
        [1178543118] => Array
            (
                [ID] => 80306
                [DATE] => 2007-05-07 15:05:18
                [TYPE] => sport
            )
     
    )
     
    Array
    (
        [1178543800] => Array
            (
                [ID] => 28497
                [DATE] => 2007-05-07 15:16:40
                [TYPE] =>blind test
            )
     
    )
    voilci le résultat du merge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Array
    (
        [0] => Array
            (
                [ID] => 1970
                [DATE] => 2007-05-07 15:13:20
                [TYPE] => Message envoyé
            )
     
        [1] => Array
            (
                [ID] => 80306
                [DATE] => 2007-05-07 15:05:18
                [TYPE] => Commande
            )
     
        [2] => Array
            (
                [ID] => 28497
                [DATE] => 2007-05-07 15:16:40
                [TYPE] => Questions Véto
            )
     
    )
    , pas moyen de classer. pareil pour array_keys, ca marche pas

  6. #6
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    le merge considere les clés comme des numériques donc il les modifie. essaye avec le merge du premier exemple.
    Ensuite essaye quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $mycle = array_keys($table_initiale);
    sort($mycle);
    for ($i = 0 ; i < count($mycle) ; $i++)
    {
            echo $table_initiale[$mycle[$i]]['ID'];
     
    }
    je pense que cela peut marcher.

  7. #7
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    non ca passe pas.
    j'ai rajouté une fonction qui arrive a me sortir mes clés en timstamp car ils fait un gros merge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     function multimerge ($array1, $array2) {
        if (is_array($array2) && count($array2)) {
          foreach ($array2 as $k => $v) {
            if (is_array($v) && count($v)) {
              $array1[$k] = multimerge($array1[$k], $v);
            } else {
              $array1[$k] = $v;
            }
          }
        } else {
          $array1 = $array2;
        }
     
        return $array1;
      }
    j'obtiens ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Array
    (
        [1178543600] => Array
            (
                [ID] => 1970
                [DATE] => 2007-05-07 15:13:20
                [TYPE] => Vidéo
            )
     
        [1178543118] => Array
            (
                [ID] => 80306
                [DATE] => 2007-05-07 15:05:18
                [TYPE] => Article
            )
     
        [1178543800] => Array
            (
                [ID] => 28497
                [DATE] => 2007-05-07 15:16:40
                [TYPE] => Sport
            )
     
    )
    Alors apres, je n'arrive pas a classer par ordre croissant ou descroissant de date.
    J'ai essayé, sort, asort, array_multisort... rien a faire.

    une autre option ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 48
    Points : 62
    Points
    62
    Par défaut
    Solution : Décompose ta date en plusieurs composantes (jour, mois, heure, ...) et tu crée toi-même ta fonction de tri, tu verra avec un peu de temps sur l'algo ta fonction ne sera pas complexe et tout aussi performante que celles de php !

  9. #9
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    j'ai trouvé !
    A force de tester tous les sort.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    krsort ($tableau,SORT_STRING );
    enfin !

    merci a vous tous et surtout à toi Bebel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] affichage des données dans un tableau
    Par bilane dans le forum Langage
    Réponses: 1
    Dernier message: 21/03/2007, 17h31
  2. [Tableaux] Trier les données d'un tableau HTML
    Par mouchkar dans le forum Langage
    Réponses: 9
    Dernier message: 05/01/2007, 20h29
  3. [Tableaux] Trier des données avec des tableaux
    Par yobogs dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2006, 13h39
  4. [Tableaux] Extraire des données d'un tableau f(char)
    Par Space Cowboy dans le forum Langage
    Réponses: 14
    Dernier message: 19/09/2006, 16h20
  5. Réponses: 8
    Dernier message: 11/07/2006, 20h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo