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] Fonction de tri en PHP


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut [Tableaux] Fonction de tri en PHP
    Salut à tous,

    J'ai un petit problème avec ma boucle php, elle lis les sous-dossiers d'un dossier sur mon serveur, mais je voudrais qu'elle puisse les trier par ordre décroissant. Je sais qu'il existe des fonctions native de php comme rsort(), krsort() ou arsort() mais je galère à l'intégrer à ma boucle.


    Voici ma boucle :

    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
    37
    38
    39
     
     
     
          $dir = "Mondossier/archives/";
    $folder  = opendir($dir);
     
     
    while (false !== ($file = readdir($folder))) {
     
    $files = array();  
     
    $files[]= $file;
     
     
          $this->files=$files;
          $this->folder=$folder;
     
    // Affichage + traitement (afin d'avoir les dossiers dans l'ordre alphabetique
     
     
     
          foreach($this->files as $key => $file){
     
    			if($file ==".." || $file =="." ) continue; 
    				$recup_nom=explode(".",$file);
    				$fichier=$recup_nom[0];
    				$extension=$recup_nom[1];
     
    				krsort($fichier); /* ici la fonction de tri décroissant */
    			}	
     
     
    		if($fichier!=$archive &&$file !=".." &&$file !=".") //  $file : modif pour éviter l'apparition d'icone en trop
    			{  		
     
        echo "<div id='icone'><a href='?dossier=$fichier'><b> $file</b></a></div><br />";
    			}
     
    	}
    J'ai comme l'impression qu'il ne calcule pas rsort() et l'appel du tableau $files pour pouvoir trier la variable $file


    Quand je fait un test avec des valeurs en dur ça fonctionne parfaitement :

    Ce code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $annee = array();
     
    	$annee [0]= "1992";
    	$annee [1]= "1996";
    	$annee [2]= "1999";
    	$annee [3]= "2006";
    	$annee [4]= "2007";
     
    krsort($annee);
    foreach ($annee as $key => $val) {
        echo "$key = $val <br />";
    }
    Voilà, si quelqu'un à une idée la dessus ça serais sympa

  2. #2
    Membre émérite
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Par défaut
    Je pense que tu ne fait pas ton krsort au bon endroit... Il est dans ta boucle, tu devrais le mettre après et stocker tes fichiers dans un tableau...

    ++
    JC

  3. #3
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    Je pense que ceci n'est pas bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (false !== ($file = readdir($folder))) {
     
    $files = array();  
     
    ..
     
    }
    => Tu remet le tableau files à chaque entrée dans la boucle
    => A la fin de la boucle il y aura dans le tableau uniquement le dernier fichier.

  4. #4
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    ça serait pas 100 fois plus simple ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $dir = 'Mondossier/archives/';
    $folder=scandir($dir,1);
    echo '<pre>';
    print_r($folder);
    echo '</pre>';

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Citation Envoyé par trotters213 Voir le message

    ça serait pas 100 fois plus simple ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $dir = 'Mondossier/archives/';
    $folder=scandir($dir,1);
    echo '<pre>';
    print_r($folder);
    echo '</pre>';



    Je sais que mon code n'est pas top mais le problème n'es pas la lecture de dossier, il fonctionne bien sur ce point là. Je désire juste trier ma liste de dossier par ordre décroissant ( krsort() ) mais j'ai essayer de le placer autrement comme dis plus haut mais ça ne fonctionne pas non plus, je ne vois vraiment pas où est l'erreur, php ne m'affiche aucune erreur, j'ai l'impression qu'il ne prend pas ma variable $files.

    Une petite aide siouplais je suis largué

    EDIT: j'avais oublier, trotters213 scandir() n'es pas pris en compte par mon serveur car c'est du php5 voilà pourquoi j'étais obligé de faire un opendir()

  6. #6
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Citation Envoyé par Blobo Voir le message
    EDIT: j'avais oublier, trotters213 scandir() n'es pas pris en compte par mon serveur car c'est du php5 voilà pourquoi j'étais obligé de faire un opendir()
    Pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $dir='Mondossier/archives/';
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh))) {
        $folder[] = $filename;
    }
    rsort($folder);
     
    echo '<pre>';
    print_r($folder);
    echo '</pre>';


    Citation Envoyé par Blobo
    je ne vois vraiment pas où est l'erreur, php ne m'affiche aucune erreur, j'ai l'impression qu'il ne prend pas ma variable $files.
    rajoutes error_reporting(E_ALL); au tout début de ton code

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Merci pour ton aide trotters,


    En ajoutant error_reporting(E_ALL); au début de mon code j'obtient ce message d'erreur à coté de tout mes liens ( dossiers affichés) :

    Notice: Undefined offset: 1 in /home/www/test/CACHE/6/monfichierPhP.5e73af.NEW on line 168

    La ligne 168 correspond à : $extension=$recup_nom[1];

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    165.            if($file ==".." || $file =="." ) continue; 
    166.		        $recup_nom=explode(".",$file);
    167.			$fichier=$recup_nom[0];
    168.		        $extension=$recup_nom[1];
    Je ne comprend pas ce message d'erreur

    Quelqu'un aurait-il une piste? Encore merci pour votre aide.

  8. #8
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    je dirai que tu découpes le nom d'un dossier, du coup, comme il n'y a pas de . dans le nom de ton dossier, le explode te renvoie une seule valeur (et pas deux), donc $_recupnom[1] n'existe pas
    il faut peut etre que tu regardes si le fichier courant est un dossier avant de faire ce découpage?

  9. #9
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Tu as la fonction is_dir pour cela

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    J'ai enfin réussi à regler mon problème.

    Merci à vous tous et particulièrement à trotters213 qui m'as mis sur la piste

    voici le code si ça peut en aider :

    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
     
     
    $dir='MonDossier/MonSousDossier/';
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh))) {
        $folder[] = $filename;
    }
    rsort($folder); // tri décroissant 
     
     
    foreach ($folder as $key => $filename) {
     
    if($filename!=$archive &&$filename !=".." &&$filename !=".") //  $file : modif pour éviter l'apparition de "." et ".."
     
    	{
    	echo "<div id='icone'><a href='?dossier=$filename'><b>$filename</b></a></div><br />"; /* ici j'ai effectué plus haut dans ma page php un $_GET pour afficher mon contenu sur la même page */
    	}
    }
    Encore merci pour vos réponses BIG UP à tous!


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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/03/2008, 18h21
  2. [Tableaux] Fonction HTML dans requete PHP
    Par wiLBuzz dans le forum Langage
    Réponses: 7
    Dernier message: 20/07/2007, 10h30
  3. [Tableaux] Fonctions de tri
    Par chtom dans le forum Langage
    Réponses: 1
    Dernier message: 25/01/2007, 21h16
  4. [Tableaux] Fonction PHP et tableau à 2 dimensions
    Par ponteprimo dans le forum Langage
    Réponses: 3
    Dernier message: 06/09/2006, 14h21

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