Trier par ordre alphabétique

Fermé
skaman851 Messages postés 13 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 9 octobre 2009 - 12 févr. 2009 à 09:40
skaman851 Messages postés 13 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 9 octobre 2009 - 23 févr. 2009 à 09:43
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 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
12 févr. 2009 à 10:05
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 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 9 octobre 2009
12 févr. 2009 à 11:34
Merci beaucoup je vais tester mais je garantie rien car je n'ai pas tout compris ;)

Cordialement
0
skaman851 Messages postés 13 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 9 octobre 2009
12 févr. 2009 à 11:47
OK donc j'ai essayer mais pas moyen ça ne marche pas!
0
niahoo Messages postés 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
12 févr. 2009 à 12:39
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 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 9 octobre 2009
13 févr. 2009 à 09:10
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 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
13 févr. 2009 à 12:31
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 247 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 23 mai 2010 19
13 févr. 2009 à 12:41
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 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 9 octobre 2009
13 févr. 2009 à 13:31
ok merci de ta patience je vais essayer mdr
0
skaman851 Messages postés 13 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 9 octobre 2009
23 févr. 2009 à 09:43
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