Page 1 sur 1

Problème - Lister les fichiers d'un répertoire

Posté : 24 nov. 2005, 21:53
par Kanji
Bonjour =) J'ai un petit problème avec mon code: j'ai envie de lister les fichiers de mon répertoire par lettre alphabétique mais il semblerait que j'ai mal placer quelque chose parce qu'il y a une redondance assez étrange =x
Voici mon code:
<? $lettrage = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

//-->Affiche la chaîne des chiffres et des lettres
for($i=0; $i <= 35; $i++){

$lettreactu = substr($lettrage, $i, 1);

echo '<br><font face="Arial Black">'. $lettreactu .'-</font><br>';

//-->Ouvre le répertoire
 if ($handle = opendir('mangas')) {

//-->Lecture des fichiers
while (false !== ($file = readdir($handle))) {

$filelist[] = $file;
asort($filelist);

}
//<--Lecture des fichiers

//-->Liste les fichiers
while (list($k, $file) = each($filelist)) {

//-->Correspondance du fichier avec la lettre
if(substr($file,0,1) == $lettreactu) {
		 ?>
		<?=substr($file,0,-4)?><br>
<?
}
//<--Correspondance du fichier avec la lettre
}
//<--Liste les fichiers
		}
//<--Ouvre le répertoire
	}
	closedir($handle); ?>
Je sais qu'il y a sûrement des script déjà existants (même si j'ai pas trouvé =p) mais je voudrais un script que je comprenne bien (même si j'ai toujours pas très bien capté les array et tout ce qui s'y rattache =x) Voilà ce que ça donne ici
Bien sûr il n'y a que 3 fichiers que j'ai voulu faire apparaître =p

Si quelqu'un pourrait m'aider, je lui en serais reconnaissant,
merci d'avance =))

Posté : 25 nov. 2005, 14:58
par goeb
bonjour,

pour commencer, ce n'est pas la peine de mettre asort($filelist); dans la boucle while. il suffit de mettre cette instruction just'après la boucle.

ensuite, il y a un truc bizzare :
- pour chaque valeur de $i, tu lis le répertoire 'manga' complètement en constituant la liste $filelist[].
- et tu sembles faire en double le travail d'ordre alphabétique puisque d'une part tu fais dans l'ordre les lettres 'ABCD..." (indice $i qui va de 1 à 35), et d'autre part tu utilises "asort".

je trouve plus naturel de :
- constituer liste $filelist[] avant de rentrer dans la boucle $i.
- faire soit le tri 'asort', soit la boucle $i, mais pas les 2.

Posté : 25 nov. 2005, 17:38
par Kanji
Re ^o^ Merci des conseils, en effet je trouvais ça louche mes emplacements pour les boucles >__< J'ai fait un peu le ménage et j'ai tout de suite vu clair =) enfin même si j'ai pas vraiment compris ce que faisait le 'asort', dès que j'ai mis 'sort' à la place ça a déjà mieux marché ^^"
Bon mon code n'est pas encore très propre (des boucles partout xD j'ai pas vraiment suivi les conseils dans ce sens ^^" désolé mais je sais pas faire sans =p) Si ça intéresse quelqu'un hein =p Le nouveau code:
<? $dir="mangas/tests";
//-->Vérifie l'adresse
if (is_dir($dir)) {
//-->Ouvre le répertoire
 if ($handle = opendir($dir)) {

//-->Lecture des fichiers
while ($file = readdir($handle)) {
if ($file != "." && $file != "..") {
$filelist[] = $file;
sort($filelist);

} }
//<--!Lecture des fichiers

//-->Affiche la chaîne des chiffres et des lettres
for($i=0; $i <= 35; $i++){

$lettreactu = substr($lettrage, $i, 1);

echo '<br><font face="Arial Black"><a name="'.$lettreactu.'" href="#haut" class="livre">'. $lettreactu .'</a>-</font><br>';

//-->Liste les fichiers
for($k=0; ; $k++){

if($filelist[$k]){
//-->Correspondance du fichier avec la lettre
if(strtoupper(substr($filelist[$k],0,1)) == $lettreactu) {
         ?>
        <a href="mangas/fiche.php?titre=<?=urlencode($filelist[$k])?>" class="livre"><?=substr($filelist[$k],0,-4)?></a><br>
<?
}
//<--!Correspondance du fichier avec la lettre
} else { break; }

}
//<--!Liste les fichiers 

		}
//<--!Ouvre le répertoire
	}
//<--!Vérifie l'adresse
	
	} closedir($handle);
?>