Trier par ordre alphabétique

skaman851 Messages postés 13 Statut Membre -  
skaman851 Messages postés 13 Statut Membre -
Bonjour,

Habitué du site mais juste inscrit je réalise une MAJ de mon Intranet mais le seul problème est que je voudrais trier les valeurs récupérer dans le dossier en ordre alphabétique. Mais pas moyen j'y arrive pas.

Voici mon code :

<HTML>
<HEAD><TITLE>Diapason</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css"/>
</HEAD>
<body>

<?php
session_start();
if(isset($userdata['privilegesAbsences']) && $userdata['privilegesAbsences'] <= 3) //Users Autorises
{
?>

<?php
$nb_fichier = 0;
echo"<p align=center><b>Choisissez le diapason que vous souhaitez consulter :</b></p>";
echo"<table class=liens>";

if($dossier = opendir('./diapason/Diapason_2008-2009/'))
{

while(false !== ($fichier = readdir($dossier)))
{

if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
{
$nb_fichier++; //On incrémente le compteur de un
echo "
<tr>
<td class=liens><li><a class=\"liens\" href='/diapason/Diapason_2008-2009/$fichier'>$fichier</a></li></td>
</tr>";
} //On ferme le if (qui permet de ne pas afficher index.php, etc.)

} //On termine la boucle

closedir($dossier);

echo"</table>";
echo'<p>Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier</p>';
echo"<br /><br />";
}

else
echo 'Le dossier n\' a pas pu être ouvert';
?>

<?php
}
else
{
echo "<div class=\"erreur\">Vous devez etre loggue pour acceder à cette zone.</div>";
}
?>
</body>
</html>

Merci de votre aide

Cordialement

8 réponses

niahoo Messages postés 262 Statut Membre 19
 
bon mettons que tu aies le chemin de ton dossier dans $dossier
genre
$dossier="/diapason/Diapason_2008-2009/";


tu fais ton fileopen etc..

tu déclares un tableau:

$tab=array();
$cpt=0; //initialise le compteur


a chaque fois que tu passes un fichier dan ton while, tu fais tes vérifications (if != '.' ou je sais plus quoi)

while(false !== ($fichier = readdir($dossier)))  // moi j'écrirais ça while($fichier = readdir($dossier))
{
   $cpt++; //ton compteur
   $tab[$cpt] = fonction_qui_récupere_le_nom_du_fichier($fichier); //je le rappelle plsu de cette fontction dsl
}


au final ça te donnera un tableau qui correspond à ça:

$tab[1] = "calendrier.doc";
$tab[2] = "liste_des_courses.xls";


ensuite grâce à la fonction sort() tu trie ton tableau.

sort($tab);
print_r($tab); //cette ligne est a supprimer, elle te permet de faire afficher ton tableau pour voir ce qu'il contient

fu fais (je te donne en algo, à toi de trouver la syntaxe précise

foreach($tab as $num => $nom_fichier) // on récupère les valeurs du tableau trié dans la variable $nom_fichier
{
    echo("<a href=\"".$dossier.$nom_fichier."\">".$nom_fichier."</a>"); // j'ai pas mis les <td> <tr> à toi de voir
}

voilà si tu as compris le principe c'est cool
0
skaman851 Messages postés 13 Statut Membre
 
Merci beaucoup je vais tester mais je garantie rien car je n'ai pas tout compris ;)

Cordialement
0
skaman851 Messages postés 13 Statut Membre
 
OK donc j'ai essayer mais pas moyen ça ne marche pas!
0
niahoo Messages postés 262 Statut Membre 19
 
alors copie moi le code que tu as fait à partir de ce que je t'ai dit et décris poi aussi précisément ce que tu veux faire, étape par étape.
0
skaman851 Messages postés 13 Statut Membre
 
Bonjour,

Dsl du retard mais j'ai été pas mal occupé hier donc voici le nouveau code qui ne fonctionne pas suivant tes conseils.

Je suis sur que sa peu marcher avc un peu de modif mais je suis perdu.

Merci d'avance!!!

Dc le nouveau code :


<?php
$nb_fichier = 0;
$tab=array();

echo"<p align=center><b>Choisissez le diapason que vous souhaitez consulter :</b></p>";
echo"<table class=liens>";
$dossier="/diapason/Diapason_2008-2009/";

if($dossier = opendir('./diapason/Diapason_2008-2009/'))
{

while($fichier = readdir($dossier))
{

if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
{
$nb_fichier++; //On incrémente le compteur de un
$tab[$cpt] = fonction_qui_récupere_le_nom_du_fichier($fichier); //je le rappelle plsu de cette fontction dsl
foreach($tab as $num => $nom_fichier)
echo "
<tr>
<td class=liens><li><a class=\"liens\" href=\"".$dossier.$nom_fichier."\">".$nom_fichier."</a></li></td>
</tr>";
}
} //On termine la boucle

closedir($dossier);
sort($tab);

echo"</table>";
echo'<p>Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier</p>';
echo"<br /><br />";
}

else
echo 'Le dossier n\' a pas pu être ouvert';
?>

Et mon ancien code :

<?php
$nb_fichier = 0;
echo"<p align=center><b>Choisissez le diapason que vous souhaitez consulter :</b></p>";
echo"<table class=liens>";

if($dossier = opendir('./diapason/Diapason_2008-2009/'))
{

while(false !== ($fichier = readdir($dossier)))
{

if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
{
$nb_fichier++; //On incrémente le compteur de un
echo "
<tr>
<td class=liens><li><a class=\"liens\" href='/diapason/Diapason_2008-2009/$fichier'>$fichier</a></li></td>
</tr>";
}
} //On termine la boucle

closedir($dossier);

echo"</table>";
echo'<p>Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier</p>';
echo"<br /><br />";
}

else
echo 'Le dossier n\' a pas pu être ouvert';
?>

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
niahoo Messages postés 262 Statut Membre 19
 
hum, tu as copié ça tel quel ?

fonction_qui_récupere_le_nom_du_fichier($fichier);


je doute que cette fonction existe, à toi de la trouver ;)

ensuite tu n'as aps fait les choses dans l'ordre

on crée un compteur ($cpt)

dans ton while, ce compteur sert à numéroter les entrées dans notre tableau $tab

$cpt=0;

while(false !== ($fichier = readdir($dossier))) 
{ 

    if($fichier != '.' && $fichier != '..' && $fichier != 'index.php') 
    {
         
   $tab[$cpt] = fonction_qui_récupere_le_nom_du_fichier($fichier); //je le rappelle plsu de cette fontction dsl
   $cpt++;

// voilà donc la tu dois trouver cette fonction, et la ligne signifie, au premier passage du while:
  // $tab[0] = "nom_de_ton_premier_fichier";
// puis au second passage $tab[1] = "nom_fichier_2.pp"
//etc
   } // fin if
} //fin while

 tu met ton closedir par la je pense puisque le dossier à été lu, on a récupéré les noms et on ne travaille plus qu'avec les noms (j'y connais aps trop en lecture de fichier/dossier,  mais à mon avis il existe des fonctions toutes faites pour avoir les fichiers dans l'ordre non ?
//maintenan ton trie le tableau,


sort($tab);

et maintenant on affiche

foreach($tab as $num => $nom)
{ 
    echo($nom."<br />");

}
0
niahoo Messages postés 262 Statut Membre 19
 
et je disais fonction qui récupere le nom du fichier come ça, car je ne sais pas mais si dans ta variable $fichier, la fonction readdir() ne renvoie que le nom, tu peux directement mettre $tab[$cpt]=$fichier;
0
skaman851 Messages postés 13 Statut Membre
 
ok merci de ta patience je vais essayer mdr
0
skaman851 Messages postés 13 Statut Membre
 
Bon voilà après plusieurs essai j'y suis arrivé en prennant des bouts de code un peu partout!

Mais il est vrai qu'en ce creusant le crane un peu plus on y arrive!

Voici la solution :

// ouvre le rep
$dp = opendir("./dossier/");

$i=0;
while ( $file = readdir($dp) )
{
// Si on veu virer des fichiers de la liste
if ($file != '.' && $file != '..')
{
// on passe les donnees dans un tableau
$ListFiles[$i]=$file;
$i++;
}
}
closedir($dp);
// tri par ordre croissant
if(count($ListFiles)!=0)
{
if($list_tri == 'DESC')
{
sort($ListFiles);
}
// tri par ordre décroissant
else
{
rsort($ListFiles);
}
}

// affiche les fichiers par ordre alphabetique decroissant
$i=0;
while ( $i < count($ListFiles))
{
echo "
<tr>
<td class=liens><li><a class=\"liens\" href='/dossier/$ListFiles[$i]'>$ListFiles[$i]</a></li></td>
</tr>";
$i++;
}
echo"</table>";
0