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 incorrecte dans un array


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut Tri incorrecte dans un array
    Bonjour,

    J'ai encore besoin de l'aide collégiale

    Voila mon pb. j'essaie de trier des timestamp que je met dans un array, seulement le tri ne se fait pas, alors que si je place manuellement les time stamp ça fonctionne... Surement une erreur dans mon code mais je ne la cerne pas...
    Merci d'avance.

    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
     
    <?php  
    $rep = 'etc/';
    $dir = opendir($rep);
    while ($f = readdir($dir))
    if(is_file($rep.$f)) 
    {
    $tri=filectime($rep.$f).",";
    $donnees = explode(',', $tri);
    arsort($donnees);
    foreach ($donnees as $val) {
      echo $val."<br />";
    }
    }
    closedir($dir);
    ?>
    Avec ce code le tri ne s'opère pas correctement...

    De cet façon la oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    <?php
    $tableau = array(1318239097,1318317607,1318239102,1318239110);
    arsort($tableau);
    foreach ($tableau as $val) {
        echo $val."<br />";
    }
    ?>

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Un concaténation des timestamp des inodes ainsi qu'un tri et un affichage en dehors de la boucle de parcours des fichiers devrait t'apporter quelque chose de mieux.

    Actuellement tu récupères un fichier, tu prends son timestamp, tu le tries avec lui même, tu l'affiches. Puis tu repars de zéro avec un nouveau fichier.

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Déjà, en indentant ton code et en fermant les accolades de tes boucles, on pourrait y voir plus clair...

    Ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tri=filectime($rep.$f).",";
    $donnees = explode(',', $tri);
    C'est quoi l'intérêt franchement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnees[] = filectime($rep.$f);
    ce serait pas plus simple et surtout plus logique ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    bin justement je patauge la... pour ça que je demande de l'aide...

    J'ai fais des recherches sur le web pour trouver une solution pour trier mes fichiers par date, mais ça ne donne rien, pour ça que j'essaie de trouver une solution, et essayant de trouver un code qui fonctionne.

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Tu as une raison particulière pour utiliser arsort() ?
    Parce que sort() me semble quand même plus approprié...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    J'utilise arsort() pour le tri décroissant.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    [QUOTE=Bovino;6291177]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tri=filectime($rep.$f).",";
    $donnees = explode(',', $tri);
    C'est quoi l'intérêt franchement ?
    QUOTE]

    L'interet est de séparer lesdonnées qui ressemble à ça :
    (1318317607131823911013182391021318239097)
    en ça :
    (1318317607,1318239110,1318239102,1318239097)

    pour les traiter dans l'array et les trier.

  8. #8
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Sauf que $tri est toujours réécrasé, donc tu n'as jamais un array avec toutes les valeurs.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    bon j'ai refais le code différrament mais par contre ça ne trie 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
     
    <?php  
    $rep = 'etc/';
    $dir = opendir($rep);
    while ($f = readdir($dir))
    if(is_file($rep.$f)) 
    {
    $tableau = array(filectime($rep.$f));
    arsort($tableau);
    foreach ($tableau as $val) {
        echo $val."<br />";
    }
    }
    closedir($dir);
    ?>

  10. #10
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    filectime() te renvoie le timestamp sur un seul fichier tu en es bien conscient ?
    Auquel cas ton array ne contient qu'une seule valeur.
    Tu tries donc un tableau comportant une seule valeur.
    A la prochaine itération de la boucle, tu réécrases ton array avec le timestamp du fichier parcouru. Et tu refais donc encore un tri sur un tableau comportant un seul timestamp.

    Comme on te l'a déjà dit, il faut créer ton tableau dans la boucle while, puis quand elle se termine faire le tri et l'affichage.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 329
    Par défaut
    bon...

    J'ai trouvé un code que j'ai adapté à mes besoin (bien loin du mien ^^).

    Merci à tous pour vos aides.

    voila le code si ça peut en aider d'autres :
    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
     
    <?php
    $path = 'etc/';// Listage d'un répertoire $path
    if ($dir = @opendir($path)) {// ouverture du dossier 
        while($file = readdir($dir)) { // lecture d'une entrée 
    	if($file != '.' && $file != '..' && $file != 'liste.php') {
            //création d'un tableau à 2 colonnes : nom + date fichiers 
            $tab[] = array($file, filemtime($path.$file));  
            // sauvegarde du nom du fichier et de sa date 
        }}
        closedir($dir); // fermeture du dossier 
    }
    //tri du tableau sur les dates
    function cmp($a,$b) {
        if ($a[1] == $b[1])
            return 0;
        return ($a[1] < $b[1]) ? 1 : -1;
    }
     
    usort($tab, "cmp");
     
    echo "<table>";
    foreach($tab as $elem) {
        //formatage de la date avec mktime() selon le format retourné par filemtime()
        echo "<tr><td><a href=".$path.$elem[0].">".$elem[0]."</a></td><td>".date("d-m-Y H:i:s",$elem[1])."</td></tr>"; 
    }
    echo "</table>";
     
    ?>

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/11/2005, 22h11
  2. [VC++6][MFC]Tri alphabétique dans CEdit
    Par ben_popcorn dans le forum MFC
    Réponses: 5
    Dernier message: 03/10/2005, 09h39
  3. [XSL] Caractère incorrect dans un fichier XML
    Par nicobest dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/09/2005, 14h06
  4. Insérer dans un array
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 29/03/2005, 09h22
  5. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38

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