Bilder aus Verzeichnis vor der Ausgabe alphabetisch sortieren?

saraaa

Grünschnabel
Hallo,

ich habe unten stehenden Code, der aus einem Verzeichnis jpgs ausliest und in einer Tabelle mit jeweiliger Beschreibung darstellt.

Mein Problem ist, dass beim Hinzufuegen neuer Bilder, diese am Ende der Tabelle angezeigt werden und nicht alphabetisch an richtiger Stelle, wie das beim ersten vollstaendigen Upload der Bilder war.

Gibt es eine schnelle Moeglichkeit in den Code eine Sortierung einzubauen oder muss ich den Code so umschreiben, dass die echos aus den schleifen rauskommen? Also erst alles lesen, dann sortieren, dann ausgeben?

Ich bin nicht der Php Profi und hab an diesem Script schon ewig rumgebastelt, bis es endlich lief - da will ich natuerlich nicht beim Unschreiben tausend Fehler einbauen;-)

Danke
Ciao
Sara

PHP:
<?php
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
$verzeichnis = "portfolio/"; // Pfad zum Verzeichnis
$handle = openDir($verzeichnis); // Verzeichnis öffnen
while ($datei = readDir($handle)) { // Verzeichnis auslesen
 if ($datei != "." && $datei != ".." && !is_dir($datei)) { // Verzeichnisse filtern
  if (strstr($datei, ".gif") || strstr($datei, ".png") || strstr($datei, ".jpg")) { // Bilder filtern
   $bilder = basename($datei, ".jpg");
   $verzeichnis_datei = $verzeichnis . $datei; // Pfad zur aktuellen Datei
   $info = getImageSize($verzeichnis_datei); // Bildinfos ermitteln (Breite, Höhe)
       // Bild anzeigen
   echo '<tr valign="top">';
   echo '<td width="160" height="130">';
   echo '<a href="portfolio';
   echo '/'.$bilder.'.php">';
   echo "<img src=\"$verzeichnis_datei\" width=\"$info[0]\" height=\"$info[1]\"> \n";
   echo '</a>';
   echo '</td>';
   echo '<td>';
   echo '<h3>';
   echo "$bilder";
   echo '</h3>';
   include 'portfolio/'.$bilder.'/descr.php';
   echo '</td>';
   echo '</tr>';
  }
 }
}
echo '</table>';
closeDir($handle); // Verzeichnis schließen
?>
 
Um die Daten sortieren zu können, brauchst du erst einmal sämtliche Daten. Du musst sie also erst einmal sammeln, bevor du sie sortieren und dann ausgeben kannst.
 
Richtig, du brauchst erst alle Namen. Lies das ganze doch einfach in ein Array, laß das sortieren und dann ausgeben.

z.B.:
Vor der while Schleife initialisierst du einen Zähler $j = 0;
Aus $verzeichnis_datei machst du ein Array $verzeichnis_datei[$j] = ...
Danach erhöhst du den Zähler $j++;

Nach dem Sortieren packst du die Ausgabe in eine foreach($verzeichnis_datei as $wert) Schleife.
 
Zuletzt bearbeitet:
Hi, eine relativ einfache Lösung wäre es, die Funktion glob() zu verwenden, da sie die Dateien automatisch sortiert zurückgibt.

Verwendung in deinem Beispiel könnte etwa so aussehen:
PHP:
foreach(glob('*.{gif,png,jpg}', GLOB_BRACE) as $image)
{
  // Daten ausgeben etc.
}
 
Danke fuer Eure Antworten!
Habe jetzt nach Eurer Anleitung umgeschrieben und es laeuft!

Nur die Funktion glob() hab ich nicht verstanden...was haette ich dafuer weiter oben im code anders machen muessen, EvilO? Falls Du Lust hast, zu antworten auch wenn das Problem geloest ist :-) ...

PHP:
<?php
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
$verzeichnis = "portfolio/"; // Pfad zum Verzeichnis
$handle = openDir($verzeichnis); // Verzeichnis öffnen
$j = 0;
while ($datei = readDir($handle)) { // Verzeichnis auslesen
 if ($datei != "." && $datei != ".." && !is_dir($datei)) { // Verzeichnisse filtern
  if (strstr($datei, ".gif") || strstr($datei, ".png") || strstr($datei, ".jpg")) { // Bilder filtern
   $verzeichnis_datei[$j] = $verzeichnis . $datei; // Pfad zur aktuellen Datei
   $j++;
  }
 }
}   
asort($verzeichnis_datei);
reset($verzeichnis_datei);
foreach($verzeichnis_datei as $wert) {   
       // Bild anzeigen
   $info = getImageSize($wert);
   $bilder = basename($wert, ".jpg");
   echo '<tr valign="top">';
   echo '<td width="160" height="130">';
   echo '<a href="portfolio';
   echo '/'.$bilder.'.php">';
   echo "<img src=\"$wert\" width=\"$info[0]\" height=\"$info[1]\"> \n";
   echo '</a>';
   echo '</td>';
   echo '<td>';
   echo '<h3>';
   echo "$bilder";
   echo '</h3>';
   include 'portfolio/'.$bilder.'/descr.php';
   echo '</td>';
   echo '</tr>';
}
echo '</table>';
closeDir($handle); // Verzeichnis schließen
?>
 
Hi, das würde dann in etwa so aussehen:
PHP:
<?php
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';

foreach(glob('portfolio/*.{gif,jpg,png}', GLOB_BRACE) as $wert)
{
   // Bild anzeigen
   $info = getImageSize($wert);
   $bilder = basename($wert, ".jpg");
   echo '<tr valign="top">';
   echo '<td width="160" height="130">';
   echo '<a href="portfolio';
   echo '/'.$bilder.'.php">';
   echo "<img src=\"$wert\" width=\"$info[0]\" height=\"$info[1]\"> \n";
   echo '</a>';
   echo '</td>';
   echo '<td>';
   echo '<h3>';
   echo "$bilder";
   echo '</h3>';
   include 'portfolio/'.$bilder.'/descr.php';
   echo '</td>';
   echo '</tr>';
}
echo '</table>';

?>
 
Zurück