Dateien eines ausgelesenen Verzeichnisses tabellarisch darstellen

Sun Rider

Mitglied
Hallo Gemeinde,

brauche mal wieder Rat von Fachleuten.
Habe gestern schon die halbe Nacht hier gesucht aber nix für mich passendes gefunden.

Also: ich lese per PHP die Bilder eines Verzeichnisses aus und lasse sie am Bildschirm ausgeben. Soweit geht das auch. Ich hätte die Bilder aber gerne in einer Tabelleform angezeigt, mit sagen wir mal 5 Spalten und Zeilen nach Erfordernis.
Hab da schon etwas rumgespielt, es ergibt aber nur eine Tabelle mit einer Spalte.

hier mal der Schnipsel:

PHP:
<?php

echo "<table border=\"1\">";

$handle = opendir("../images/mitglieder");
$i=0; while($file = readdir($handle)) {
if(!preg_match("|^\.{1,2}$|",$file))  {
$array[$i]=$file;  $i++;  } }
//die Ausgabe:
sort($array); reset($array);
for($i=0;$i<count($array);$i++)
{
echo "<tr><td><img src=../images/mitglieder/".$array[$i]." height=110 width=90 align =center> <br /> ".substr($array[$i],0,-4)." </td></tr>\n";
}
closedir($handle);

echo "</table>";

?>

Vorab schon mal vielen Dank....
 
Hallo Timestamp,
Vielen Dank für deine Antwort.
die Idee hatte ich auch schon. Leider habe ich dann in der 1. Zeile 5 mal das 1. Bild, in der 2. Zeile 5 mal das 2. usw.
Denke aber, ich hab da was falsch gemacht.
Wie würdes Du das in der Schleife einbauen ?
 
Ungetestet, aber von Idee etwa so:
PHP:
<?php 

echo "<table border=\"1\">"; 

$handle = opendir("../images/mitglieder"); 
$i=0; while($file = readdir($handle)) { 
if(!preg_match("|^\.{1,2}$|",$file))  { 
$array[$i]=$file;  $i++;  } } 
//die Ausgabe: 
sort($array); reset($array); 
$max = count($array); //Vor der Schleife machen, spart Rechenleistung/Zeit
$maxrows = ceil($max/5); // Wegen 5 Bildern Pro Zeile
for($i = 0; $i < $maxrows;$i++) { 
  echo '<tr>';
  for( $j = 0; $j < 5; $j+=5 ){
    echo '<td>';
    echo '<img src="http://www.tutorials.de/images/mitglied/'.$array[$i*5+$j].'" />';
    echo '</td>';
  }
  echo '</tr>';
} 
closedir($handle); 

echo "</table>";
 
Hey Timestamp,

jo, das sieht wirklich etwas anders aus als meine Idee. Werd's mal ausprobieren und mich dann wieder melden.
Erst mal Danke !
 
Hallo Timestamp,

leider klappt das so auch nicht. Es wird nur jedes 5. oder 6. Bild angezeigt. Auch alles nur in 1 Spalte.
Irgenwo ist da noch der Wurm drin, finde ihn aber nicht...
 
Ahh, wenn man hier in der textarea programmiert kommt man schonmal durcheinander, die Schleife muss anders rum lauten ;)
PHP:
for($i = 0; $i < $maxrows;$i+=5) {  
  echo '<tr>'; 
  for( $j = 0; $j < 5; $j++ ){ 
    echo '<td>'; 
    echo '<img src="http://www.tutorials.de/images/mitglied/'.$array[$i*5+$j].'" />'; 
    echo '</td>'; 
  } 
  echo '</tr>'; 
}
 
Ah ja, danke. Sieht schon ebbes besser aus, funkt aber noch nicht richtig.
Jetzt sind es immerhin 2 Zeilen mit je 5 Bildern. Der Rest der ca. 50 Bilder wird aber nicht angezeigt.
Hab schon versucht, die Angabe für die max. Spaltenanzahl hochzusetzen, nützt aber nix.
Vieleicht sollte ich noch erwähnen, das sich die Anzahl der Bilder im Ordner ändern kann und daher nicht unbedingt durch 5 teilbar ist. Kanns damit zu tun haben ?

Edit:
Tschuldigung, mir war ceil entgangen. Also sollte die Gesamtanzahl der Bilder keine Rolle spielen. $max/5 wird ja gerundet...
 
Zuletzt bearbeitet:
So jetzt ich :)

PHP:
$bilder = scandir('../images/mitglieder/');

echo '<table border="1"><tbody><tr>';
for($i=2,$n=0,$end=count($bilder);$i<$end;$i++) {
  echo '<td><img src="http://www.tutorials.de/images/mitglieder/'.$bilder[$i].'" height="110" width="90" align ="center"><br />'.substr($bilder[$i],0,-4).'</td>';
  if(++$n%5==0) echo '</tr><tr>';
}
echo '</tr></tbody></table>';
 
Zuletzt bearbeitet:
Hallo Napofis & Timestamp,

vielen vielen Dank für eure Hilfe !!
Mit der Lösung von Napofis läuft nach einer kleinen Pfadanpassung alles wunschgemäß !!

Wunderbar, bin begeistert.

Nochmals Danke !!
 
Zurück