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 :

Tri sur la date ?


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Points : 683
    Points
    683
    Par défaut Tri sur la date ?
    Bonsoir,

    Je sais qu'il s'agit encore d'une question sur le tri d'un tableau selon un colonne en particulier mais je m'y perds un peu...

    J'ai le code suivant : d'abord je lis 2 flux rss que je mets bout à bout dans un tableau. Et ensuite j'affiche le tableau
    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
    33
    34
    35
    36
     
    $i = 0;
    $xml = simplexml_load_file('flux1.xml') ;
    foreach($xml->channel->item as $item) 
    {
    $tableau[$i][1] = utf8_decode($item->title);
    $tableau[$i][0] = utf8_decode($item->pubDate);
    $tableau[$i][2] = utf8_decode($item->description);
    $tableau[$i][3] = "source n°1";
    $tableau[$i][4] = utf8_decode($item->link);
    $i++;
    }
     
    $xml = simplexml_load_file('flux2.xml') ;
    foreach($xml->channel->item as $item)
    {
    $tableau[$i][1] = utf8_decode($item->title);
    $tableau[$i][0] = utf8_decode($item->pubDate);
    $tableau[$i][2] = utf8_decode($item->description);
    $tableau[$i][4] = utf8_decode($item->link);
    $tableau[$i][3] = "source n°2";
    $i++;
     
    }
     
    /* affichage du tableau */
     
    for($k=0;$k<$i;$k++)
    	{
    	echo "<h3><a href='".$tableau[$k][4]."'>".$tableau[$k][1]."</a></h3>";
    	$daterss = utf8_decode($tableau[$k][0]);
    	echo '<p>Le '.date("d F Y",strtotime($daterss)).', '; 
    	echo "par ".$tableau[$k][3]."</p>";
    	echo "<p>".$tableau[$k][2]."</p>";
    	echo "<p class='description'></p>";
    	}
    OK... le code n'est pas génial mais il a le mérite de marcher.
    Cependant, il affiche les infos du flux 1 puis les infos du flux 2, logique : c'est l'ordre du tableau.

    J'aimerai savoir comment je peux m'y prendre pour faire le tri par date, et ainsi afficher les éléments des flux par ordre chronologique.

    Merci et à bientôt,
    En espérant que mon explication ait été claire.

    A bientôt,
    Alexis

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Avec array_multisort() (exemple #2 http://php.net/manual/fr/function.array-multisort.php)

    au passage, plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach($xml->channel->item as $item) 
    {
    $tableau[] = array(
                    utf8_decode($item->pubDate),
                    utf8_decode($item->title),
                    utf8_decode($item->description),
                    "source n°1",
                    utf8_decode($item->link)
                 );
    }

  3. #3
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Points : 683
    Points
    683
    Par défaut
    Merci pour cette indication mais c'est pas là que j'avais commencé.

    Si j'ai posté ici, c'est que je n'ai pas compris comment mettre array_multisort en application. Comment puis-je faire comprendre au script que je veux faire le tri sur la "colonne0" ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je t'ai indiqué le mauvais exemple.
    C'est le #3 qui te concerne.

  5. #5
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Points : 683
    Points
    683
    Par défaut
    J'ai ajouté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach ($tableau as $key => $row) {
        $col0[$key] = $row['0'];
        $col1[$key] = $row['1'];
    	$col2[$key] = $row['2'];
    	$col3[$key] = $row['3'];
    	$col4[$key] = $row['4'];
    }
     
    array_multisort($col0, SORT_DESC, $tableau);
    Le tableau ne s'affiche plus dans le même ordre mais je ne vois pas du tout quel tri a été fait

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $row[0] et non $row['0']

  7. #7
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Points : 683
    Points
    683
    Par défaut
    Bonjour,

    effet... erreur impardonnable...

    Plus sérieusement, j'ai essayé de faire me tri selon les autres colonnes et ça marche. Cependant ça ne marche toujours pas pour la "col0" qui contient la date.
    Cette nuit, j'ai eu une petite idée, j'ai remplacé les lignes 31 et 32 de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $daterss = utf8_decode($tableau[$k][0]);
    echo '<p>Le '.date("d F Y",strtotime($daterss)).', ';
    Par celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<p>Le '.utf8_decode($tableau[$k][0]).', ';
    Et j'ai essayé de trier selon la date (la col0 donc...)

    La bonne nouvelle c'est qu'un tri se fait : d'abord les Wed (mercredi), puis les Tue (mardi), puis les Thu (jeudi), puis les Sun (dimanche), puis les Mon (lundi) et enfin les Fri (vendredi).
    Je pense qu'il me faut trouver un bon formatage de la date dans la colonne 0 de mon tableau pour avoir un tri chronologique selon la date.

    Je vous tiens au courant.

    A bientôt et bonne journée,
    Alexis

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu as des dates Y-m-d, elles se trieront correctement.

  9. #9
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Points : 683
    Points
    683
    Par défaut
    Juste avant de lire ta réponse, j'avais trouvé une solution qui fonctionne :
    J'ai ajouté une "nouvelle colonne" au tableau. Celle ci contient le timestramp unix. Je peux ainsi faire un classement croissant ou décroissant.

    Par contre, je dois avouer que la solution que tu proposes me parait un peu plus correcte d'un point de vue du développement et de l'optimisation du code. Je la testerai dés que possible.

Discussions similaires

  1. [BATCH] Tri sur les dates de fichiers
    Par tonf dans le forum Windows
    Réponses: 1
    Dernier message: 26/04/2007, 16h25
  2. [MySQL] Tri sur les dates
    Par urbalk dans le forum PHP & Base de données
    Réponses: 33
    Dernier message: 21/03/2007, 22h01
  3. Problème de tri sur les dates par année puis mois
    Par rob2-9 dans le forum Access
    Réponses: 26
    Dernier message: 11/08/2006, 11h04
  4. [Dates] tri sur les dates
    Par udta5371 dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 21h49
  5. Tri sur les dates
    Par ShadoX dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/06/2006, 11h58

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