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] tri tableau php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut [Tableaux] tri tableau php
    Bonsoir,
    j'essaie de trier le tableau suivant mais je ne sais pas comment m'y prendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tab = array();
     
        foreach ($liste as $item ) {
     
    $tab[]['date'] = $item[pubdate];
    $tab[]['titre'] = $item[title];
    $tab[]['descr'] = $item[description];
     
    }
    je souhaiterais trier les éléments par rapport à la date (ce sont des rss que je souhaiterais récupérer et trier par ordre de parution)
    merci de votre aide

  2. #2
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Bonsoir,

    Déjà tu as une erreure dans ton code (les quotes dans les array).
    Ensuite cela dépend du format de la date (Unixtime ?, String date ?, etc...)
    PHP t'offre une panoplis de function de tri comme sort, bsort, asort, arsort, etc.... tu trouvras sans doute ce que tu cherches

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    merci de ta réponse,
    c'est une date format unix je pense AAAA-MM-JJ heure,
    j'ai essayé avec différentes fonctions, même sans les quotes mais je n'ai pas compris grand chose aux tableaux

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Les fonctions de tri proposées dans la bibliothèque PHP effectuent des tris sur les éléments des tableaux qu'on leur fournit. Par défaut (sort, asort, etc...) le tri s'effectue selon une fonction d'ordre classique avec l'opérateur < et l'opérateur == des types scalaires qui constituent les éléments du tableau.

    Ce qui suppose que les éléments de ton tableau ont un type et une sémantique homogène. Si tu as un tableau de chaines de caractères, tu obtiendras par sort( $array ) un tableau de chaînes de caractères triées par ordre croissant. Mais si certaines de tes chaines ont un autre sens que certaines autres chaînes, hé bien.... tu obtiendras toujours un tableau de chaines triées par ordre croissant mais cet ordre ne voudra rien dire.

    Pour en revenir à ta question, si je comprends bien : tu as un tableau de tableaux : $liste contient des $items qui sont des tableaux à 3 postes. Tu veux trier $liste par $item['pubdate'] croissant.
    Or, dans ta boucle, tu mets $liste à plat dans deuxième tableau à deux dimensions : $tab est un tableau de tableaux à 1 poste.

    Visualisation : le code de test (je t'engage à faire ce genre de tests chez toi, c'est un bon entrainement pour poser les problèmes clairement)
    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
    $tab = array();
    $liste = array();
    $liste[] = array( 'pubdate' => '2007-02-03', 'title' => 'titre1', 'description'=> 'aa' );
    $liste[] = array( 'pubdate' => '2007-02-01', 'title' => 'titre2', 'description'=> 'aa' );
    $liste[] = array( 'pubdate' => '2007-02-02', 'title' => 'titre3', 'description'=> 'aa' );
     
    foreach ($liste as $item ) {
    	$tab[]['date'] = $item['pubdate'];
    	$tab[]['titre'] = $item['title'];
    	$tab[]['descr'] = $item['description'];
    }
     
    echo 'Voici $liste : ';
    print_r( $liste );
    echo 'Voici $tab : ';
    print_r( $tab );
    Le résultat (dump des deux tableaux) :
    Voici $liste :
    Array (
    [0] => Array ( [pubdate] => 2007-02-03 [title] => titre1 [description] => aa )
    [1] => Array ( [pubdate] => 2007-02-01 [title] => titre2 [description] => aa )
    [2] => Array ( [pubdate] => 2007-02-02 [title] => titre3 [description] => aa )
    )

    Voici $tab :
    Array (
    [0] => Array ( [date] => 2007-02-03 )
    [1] => Array ( [titre] => titre1 )
    [2] => Array ( [descr] => aa )
    [3] => Array ( [date] => 2007-02-01 )
    [4] => Array ( [titre] => titre2 )
    [5] => Array ( [descr] => aa )
    [6] => Array ( [date] => 2007-02-02 )
    [7] => Array ( [titre] => titre3 )
    [8] => Array ( [descr] => aa )
    )
    Je ne pense pas que c'est ce que tu cherches.
    Donc, pour ton problème :

    1 - Soit c'est un exercice de cours : tu veux trier $liste tel quel (sans le modifier) en fonction de $liste[n]['pubdate'] et tu dois écrire une petite fonction de tri toi-même pour faire en sorte de réorganiser les éléments.

    2 - Soit ce n'est pas un exercice de cours et tu as la solution toute faite dans les fonctions asort() ou plus probablement uasort() de la bibliothèque PHP. Voir la doc pour les détails, les exemples sont assez bien expliqués. D'après ce que je comprends de ton problème, uasort + une callback de 3 lignes fera l'affaire.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    Merci infiniment pour ton explication Herode, j'avais du mal avec les tableaux.
    je teste et vous tiens au courant

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Par défaut
    j'ai vraiment du mal avec les tableaux, je ne pensais pas que c'était aussi compliqué.
    j'essai de récupérer des rss avec magpie et ensuite de les afficher par date de parution.
    voici le script complet :

    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
    <?php 
     
    require_once "magpierss/rss_fetch.inc";
     
    $source = array();
     
    $source[0] = "http://www.lemonde.fr/rss/sequence/0,2-3214,1-0,0.xml";
    $source[1] = "http://www.lemonde.fr/rss/sequence/0,2-651865,1-0,0.xml";
    $source[2] = "http://www.lemonde.fr/rss/sequence/0,2-3260,1-0,0.xml";
     
    if ($source){
     
    for ($i=0; $i<=6; $i++){
     
    $rss = fetch_rss($source[$i]);
     
     
    if (is_array($rss->items))
     
        {
        $liste = array_slice($rss->items, 0, 3);
     
    print_r($liste);
    }
    }
    }
    ?>
    je voudrais trier te tableau $liste par rapport à la date $item[pubdate] et ne garder que : item[pubdate], item[titre] et item[description].

    Si vous pouviez m'aider ça serait vraiment sympa, ça fait un moment que je galère.
    Merci

Discussions similaires

  1. [Tableaux] Tri tableau avec underscore et chiffres
    Par __fabrice dans le forum Langage
    Réponses: 4
    Dernier message: 18/10/2006, 17h05
  2. [Tableaux] tri tableau avec date
    Par omelhor dans le forum Langage
    Réponses: 12
    Dernier message: 17/10/2006, 20h24
  3. [Tableaux] classer tableau php
    Par NoBreak2004 dans le forum Langage
    Réponses: 7
    Dernier message: 16/10/2006, 00h59
  4. [Tableaux] affichage tableau php apres requete sql count
    Par heteroclite dans le forum Langage
    Réponses: 1
    Dernier message: 13/09/2006, 20h53
  5. [Tableaux] Tri tableau
    Par licorne dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2006, 12h14

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