Trier une listbox qui liste un répertoire...?

Répondre
theavengers
le 02/12/2009 à 12:13
theavengers
Bonjour à tous, j'ai actuellement une listbox qui se rempli avec le contenu d'un repretoire. Mais je désire faire un tri par ordre alphabetique "humain". Mais étant un gros déburant, je ne vois pas comment adapté la fonction NATCASESORT avec mon code.
Si quelqu'un pouvait m'aider, ça serait super :

<?php
$rep ='../upload/';
if (!is_dir ($rep)) {
echo 'Erreur, ', $dir,' n\'est pas un repertoire valide';
exit;
}
$dir = opendir ($rep);
while (false !== ($fichier = readdir ($dir))) {
if ($fichier !== '..' && $fichier !== '.') {

echo '<option value="',$fichier,'">',$fichier,'</option>';
}
}
?>
LA GLOBULE
le 02/12/2009 à 13:43
LA GLOBULE
Voici une solution possible :

1) Dans ton while, au lieu d'afficher les options de ton select, il te suffit de stocker ces noms de fichier dans un tableau.
2) Ensuite, tu tries le tableau grâce à la fonction sort.
3) Puis tu fais un foreach sur ce tableau pour afficher tes <option>.
theavengers
le 02/12/2009 à 14:38
theavengers
Merci beaucoup pour ton explication mais houla, je vais voir ce que je peux faire avec les infos que tu m'as transmis et mes connaissances ;)
theavengers
le 03/12/2009 à 15:26
theavengers
Bon, j'ai tenté pas à pas, je fais ma boucle ....

<?php
while($val=mysql_fetch_array($result))
if($val["valid"] == 1)
{
$id=$val['ID'];
$aFile=$val['aFile'];

echo"$aFile";
echo "<br />";
}
?>


Jusque la, ça va, mais si je fais un mélange des deux :
<?php
$rep ='../upload/';
if (!is_dir ($rep)) {
echo 'Erreur, ', $dir,' n\'est pas un repertoire valide';
exit;
}
$dir = opendir ($rep);
while (false !== ($fichier = readdir ($dir))) {
if ($fichier !== '..' && $fichier !== '.') {

while($val=mysql_fetch_array($result))
if($val["valid"] == 1)
{

echo"$fichier";
echo "<br />";
}
}
}
?>


Je n'affiche plus rien ,et j'ai encore rien trié car je cherche toujours comment me servir de la fonction sort.

Qu'est que je galère avec les ARRAY...
theavengers
le 03/12/2009 à 17:16
theavengers
Vais m'en sortir, vais m'en sortir ....
<?php
$rep ='../upload/';
if (!is_dir ($rep)) {
echo 'Erreur, ', $dir,' n\'est pas un repertoire valide';
exit;
}
$dir = opendir ($rep);
while (false !== ($fichier = readdir ($dir))) {
if ($fichier !== '..' && $fichier !== '.') {
//
//

$contenu = array ("$fichier");

foreach($contenu as $cle => $element)
{
echo '<option value="',$fichier,'">',$fichier,'</option>';
}
}
}
?>
LA GLOBULE
le 03/12/2009 à 18:44
LA GLOBULE
Avant ton while, fais un :

$contenu = array ();

Et dans le while, change ton $contenu = array ("$fichier"); en $contenu[] = $fichier;

Ensuite, il faut fermer le while avant de lancer le foreach (le while sert à remplir le tableau, foreach sert à afficher les fichiers, il ne faut pas les mélanger).

Cela devrait fonctionner.
theavengers
le 04/12/2009 à 10:00
theavengers
Hello,
effectivement, ça marche beaucoup mieux, ça tri bien par ordre alphabetique ;)
Juste un defaut, il me marque plusieurs fois le même fichier.

<?php
$rep ='../upload/';
if (!is_dir ($rep)) {
echo 'Erreur, ', $dir,' n\'est pas un repertoire valide';
exit;
}
$dir = opendir ($rep);
$contenu = array ();
while (false !== ($fichier = readdir ($dir))) {
if ($fichier !== '..' && $fichier !== '.') {
//
//

$contenu[] = $fichier;
}

foreach($contenu as $cle => $element)
{
echo '<option value="',$fichier,'">',$fichier,'</option>';

}
}
?>
theavengers
le 04/12/2009 à 10:01
theavengers
En fait, dans l'affichage il incremente de 1 à chaque fois, par exemple :

a
b
b
c
c
c
d
d
d
d

J'ai une erreur dans ma boucle...
LA GLOBULE
le 04/12/2009 à 11:37
LA GLOBULE
Je t'ai dis qu'il fallait faire le foreach en dehors du while...

Indente ton code, tu verras que ton foreach est dans ton while.
theavengers
le 04/12/2009 à 12:05
theavengers
J'avais mal lu. Désolé et merci de ta patience ;)
Sauf que si je le sors du while il n'affiche plus rien dans la listbox ... et il doit surement falloir que je lui redéclare une variable.

<?php
$rep ='../upload/';
if (!is_dir ($rep)) {
echo 'Erreur, ', $dir,' n\'est pas un repertoire valide';
exit;
}
//
$dir = opendir ($rep);
$contenu = array ();
//boucle
while (false !== ($fichier = readdir ($dir))) {
if ($fichier !== '..' && $fichier !== '.') {
$contenu[] = $fichier;
}
}

foreach($contenu as $cle => $element)
{
echo '<option value="',$fichier,'">',$fichier,'</option>';
}
?>
Répondre
LoadingChargement en cours