trier nombres par ordre croissant

Eléphanteau du PHP | 35 Messages

05 juin 2007, 10:28

bonjour ami(e)s codeurs et codeuses! :D

J'ai un souci, je suis comment dire, débutante en php et j'aimerais savoir comment je pourrais faire un tri numérique par ordre croissant. Je m'explique, voilà mon code:
// url du fichier qui contient les images 
$urlphoto = "http://localhost/web/html/upload/mesImages"; 

// nom du répertoire qui contient les images 
$nomRepertoire = "/var/www/web/html/upload/mesImages"; 
if (is_dir($nomRepertoire))
   {

   $dossier = opendir($nomRepertoire);
   $nbr=0;

//On va fabriquer un formulaire
	echo "<form id='formImages' name='formImages' action='#'>";

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

	if(is_file($nomRepertoire.'/'.$Fichier))

	$nbr++;
	
      	if ($Fichier != "." AND $Fichier != ".." AND stristr($Fichier,'.jpg')) 
        { 
	
        // Hauteur de toutes les images 
        $h_vign = "120"; 
        $taille = getimagesize($nomRepertoire."/".$Fichier); 
        $reduc  = floor(($h_vign*100)/($taille[1])); 
        $l_vign = floor(($taille[0]*$reduc)/100); 
      
          echo '<a target="_blank" href="', $urlphoto, '/',$Fichier, '">';
          echo '<img src="', $urlphoto, '/',$Fichier, '" '; 
          echo "width='$l_vign' height='$h_vign'>"; 
          echo "</a>&nbsp;"; 
	  echo "<input type='checkbox' name='$Fichier' id='$Fichier' /><label for='$Fichier'>$Fichier</label><br />";
          }
        }    

//On ferme le formulaire
	echo "</form>";
	  echo "<br>Il y a $nbr images<br>";

   closedir($dossier); 
       }
   }else{
   echo "Le répertoire spécifié n\'existe pas";
   }
bon la partie problèmatique est le $Fichier, qui, lorsque je fais un echo me renvoie mes fichiers mais dans le désordre, mes fichiers sont des miniatures. Ca me renvoie genre ça:

zep32.jpg, zep29.jpg, zep33.jpg, zep4.jpg, zep1.jpg, zep34.jpg, zep27.jpg, zep26.jpg, zep36.jpg, zep14.jpg, zep28.jpg, zep17.jpg, zep35.jpg, zep11.jpg, zep12.jpg, zep22.jpg, zep7.jpg, zep5.jpg, zep9.jpg, zep15.jpg, zep10.jpg, zep37.jpg, zep16.jpg, zep2.jpg, zep20.jpg, zep18.jpg, zep3.jpg etc etc....

Et bien entendu j'aimerais que mes images soient affichées dans l'ordre croissant....impossible de trouver comment faire.....si quelqu'un peut m'aider, ça serait pas de refus du tout! Ca serait même carrément sympa! :wink:

Par contre mon code peut servir à ceux qui souhaite parcourir un dossier d'images, et les afficher en miniatures! :pouce:

Mammouth du PHP | 505 Messages

05 juin 2007, 10:38

Au lieu d'afficher directement tes liens, tu scan ton rep et tu met la liste des fichiers dans un tableau.

Tu tri ce tableau (asort voir peut etre natsort dans ton cas) et tu fais un foreach() sur ton tableau ou tu fais les echo de tes liens.

Eléphanteau du PHP | 35 Messages

05 juin 2007, 10:45

Salut titerm!

Merci de m'avoir répondu! Bon euhhh je vais essayer de voir comment marche tout ça alors....mais mon statut de novice me laisse présager que je vais avoir du mal! lol
Alors si tu peux m'aider d'avantage n'hèsite pas! En attendant je vais voir ce que je peux faire ;)

Mammouth du PHP | 505 Messages

05 juin 2007, 11:17

je vais te filer le skelette global en reprenant des morceaux de ton source



// Lecture de la liste des fichiers
// Aucun echo dans cette section
$listFichier = array() ;
if(is_dir() ) {
 opendir();
 while( $f = readdir()  ) {
   if( "c'est un fichier comme tu veux") {
     $listFichier[] = $f;
   }
 }
closedir();
 // Tri du tableau de fichier, regarde les doc de asort() et natsort() pour voir la diff
 natsort($listFichier);

// Affichage du resultat
 echo 'form';
 foreach($listFichier as $fichier) {
   $taille = getimagesize();
  //blablabla
   echo  '<a blablabla >';
   echo '<input blablabla>';
 }
 echo '/form';
 echo 'il y a nb images ' . count($listFichier);
}
else  {
 echo 'rep inexistant';
}




Eléphanteau du PHP | 35 Messages

05 juin 2007, 12:24

Re titerm!

Juste pour te remercier parce que ça marche niquel now! :D j'ai fait quelques modifications donc je remet mon code pour les futures personnes qui rencontreront mon problème ;)

// Url du fichier qui contient les images 
$urlphoto = "http://localhost/web/html/upload/mesImages"; 

// Nom du répertoire qui contient les images 
$nomRepertoire = "/var/www/web/html/upload/mesImages"; 

// Lecture de la liste des fichiers
// Aucun echo dans cette section
// On défini un tableau
$listFichier = array() ;

if(is_dir($nomRepertoire) ) {
$dossier = opendir($nomRepertoire);

 	while( $fichier = readdir($dossier)  ) {
	
   		if($fichier != "." AND $fichier != ".." AND stristr($fichier,'.jpg')) {
		//on met chaque fichier dans le taleau
     		$listFichier[] = $fichier;
		$nbr= count($listFichier); 
   		}
 	}
closedir($dossier);

// Tri du tableau de fichier, regarder les doc de asort() et natsort() pour voir la diff
natsort($listFichier);

// Affichage du resultat
echo "<form>";
	foreach($listFichier as $fichier) {
	// Hauteur de toutes les images 
        $h_vign = "120"; 
        $taille = getimagesize($nomRepertoire."/".$fichier); 
 	$reduc  = floor(($h_vign*100)/($taille[1])); 
        $l_vign = floor(($taille[0]*$reduc)/100); 

	echo '<a target="_blank" href="', $urlphoto, '/',$fichier, '">';
	echo '<img src="', $urlphoto, '/',$fichier, '" '; 
	echo "width='$l_vign' height='$h_vign'>"; 
	echo "</a>&nbsp;"; 
	echo "<input type='checkbox' name='$fichier' id='$fichier' /><label for='$fichier'>$fichier</label><br />";
 	}

// On ferme le formulaire
echo "</form>";
echo "<br>Il y a $nbr images<br>";
}
else  {
 echo "repertoire inexistant";
}

Mammouth du PHP | 505 Messages

05 juin 2007, 13:27

juste pour te dire que le $nbr = count() dans le while, ca le fait pas.
vire le $nbr du while, et met le count directement a la fin, (voir skelette )

Invité
Invité n'ayant pas de compte PHPfrance

05 juin 2007, 14:30

en fait quand je met le count à la fin, ça marche pas et quand je laisse comme ça, ça le fait, donc bon... :roll:

ça me donne le bon nombre d'images .jpg qui se trouve dans $nomRepertoire.
Pourquoi tu dis que ça le fait pas toi?

Mammouth du PHP | 505 Messages

05 juin 2007, 14:59

bah je dis ca le fait pas car tu fais un count de ton tableau a chaque boucle. Totalement inutile.

Il faut compter une seule fois le nombre d'image dans le tableau apres le while.

soit tu fais juste après le while et tu laisse ton echo a la fin comme il est
$nbr = count($listFichier);

Soit tu modifie ton echo et tu ne passe pas par une var intermédiaire.

echo "<br>Il y a " . count($listFichier) . "$nbr images<br>";

C'est plus ou moins pareil et les 2 fonctionnes à coup sur. Si une des 2 methodes ne fonctionne pas, c'es que tu fais une erreur qq part :)

Invité
Invité n'ayant pas de compte PHPfrance

05 juin 2007, 15:33

En effet les deux marchent :D
Mais je n'arrive pas à comprendre la deuxième possibilité.....
Soit tu modifie ton echo et tu ne passe pas par une var intermédiaire.
echo "<br>Il y a " . count($listFichier) . "$nbr images<br>";
En fait j'ai du mal à comprendre comment $nbr peut contenir le nombre sans dire avant:
$nbr=count($listFichier)
Je suis pas super douée mais j'ai envie d'apprendre et j'aime pas quand je comprend pas! Alors si tu as un petit temps, lol

Mammouth du PHP | 505 Messages

05 juin 2007, 15:38

en fait il ne faut pas metre $nbr dans la 2nd solution, c'est une erreur de frappe de ma part...

mea culpa, mea maxima culpa :)

Invité
Invité n'ayant pas de compte PHPfrance

05 juin 2007, 15:44

lol, pas de souci! ça arrive, même aux meilleurs !! ;)
Je suis surtout contente de voir que ma question n'était pas totalement dénuée de sens!

Merci encore pour ton aide!