Zeilenumbruch -> Brett vorm Kopf

Slizzzer

Erfahrenes Mitglied
Hallo!

Hab ein Script zusammengeschustert, welches Bilddateien aus einem Verzeichnis liest und in einer Tabelle ausgibt.
Es sollen immer 6 Bilder in einer Zeile stehen. Nun habe ich folgende Schleife eingearbeitet:
PHP:
   $verz=opendir ('../icons/');
   $i = 0;
    while ($file = readdir ($verz)) 
     {  
      if($file != "." && $file != "..") 
      echo "<td class='thread' align='center'><input name='icon' type='radio' value='$file'><img src='../icons/$file' border='0'></td>\n";
      ++$i;
      if(is_integer($i/6)){ echo "</tr>\n<tr>\n"; }
     }
      closedir($verz);

Normalerweise müßte doch nach 6 Dateien ein Zeilenwechsel kommen, da er den Zeilenwechsel nur bei einem ganzzahligen Ergebnis ausgeben soll.
Macht er bei mir aber nicht!
Er gibt jetzt in der ersten Zeile 4 Zellen, dann 3 Zeilen 6 Zellen und eine 5 Zellen aus.
Ich seh den Fehler jetzt nicht, hab wohl n Brett vorm Kopf.:rolleyes:
 
Oh man hey, jetzt bin ich gerade eben echt auf dem Schlauch gestanden...
Dein
PHP:
 if($file_!=_"."_&&_$file_!=_"..")_{
______echo_"<td_class='thread'_align='center'><input_name='icon'_type='radio'_value='$file'><img_src='../icons/$file'_border='0'></td>\n";
sorgt nur dafür dass die Zellen nicht ausgeben werden, aber der Zähler ++$i zählt trotzdem weiter, deshalb in der 1. Zeile 4 Zellen. Bei der Letzten mit den 5 Zellen würde ich sagen dass es daran liegt, dass es nur 29 Bilder sind und sich die 29 nicht durch 6 gerade teilt...
so müsste es gehen:
PHP:
$verz=opendir_('../icons/');
___$i_=_0;
____while_($file_=_readdir_($verz))_
_____{__
______if($file_!=_"."_&&_$file_!=_"..")_{
______echo_"<td_class='thread'_align='center'><input_name='icon'_type='radio'_value='$file'><img_src='../icons/$file'_border='0'></td>\n";
______++$i;}
______if(is_integer($i/6)){_echo_"</tr>\n<tr>\n";_}
_____}
______closedir($verz);

gruß tob
 
Zuletzt bearbeitet:
Hmm,

nu macht er 2 leere Table-Rows und legt dann erst los.
Aber ich sehe schon mein nächstes Problem:

Wenn die Anzahl der Bilder nicht genau aufgeht, muß er ja leere, bzw. mit &nbsp; gefüllte Zellen ausgeben, um wieder auf 6 Zellen pro Zeile zu kommen?!

Oh man, da hängt man an so einem Kleinkram fest *grr*:(
 
Das problem kenn ich. Hab es folgendermaßen gelöst:
PHP:
$num = count($files); //$files ist das Array in dem die Bilder gespeichert sind
$perrow = 5; //Anzahl Bilder pro Zeile
$fullines = floor($num / $perrow);
$rest = $num % $perrow;
echo "<table>";
   $i = 1;
   while ($i <= $fullines)
   {
      $n = 1;
      echo "<tr>";
      while($n <= $perrow)
      {
         $key = $n + ($i-1)*$perrow;
         echo "<td><a href=\"...".urlencode($files[$key])."\">".$files[$key]."</a></td>";
         $n = $n + 1;
      }
      echo "</tr>";
      $i = $i + 1;
   }
   if($rest != "0")
   {
      echo "<tr><td colspan=\"$perrow\">";
      echo "<table>";
         echo "<tr>";
         $key = $fullines * $perrow + 1;
         $i = 1;
         while($i <= $rest)
            {
               echo "<td><a href=\"...".urlencode($files[$key])."\">".$files[$key]."</a></td>";
               $key = $key +1;
               $i = $i + 1;
            }
            echo "</tr>";
         echo "</table>";
         echo "</td></tr>";
      }
echo "</table>";
 
Slizzzer hat gesagt.:
Hmm,

nu macht er 2 leere Table-Rows und legt dann erst los.
Ich denke, dass das an is_integer($i/6) liegt. Die ersten beiden Durchläufe der Schleife ist $i noch 0. Da 0/6 = 0 und 0 wohl auch ein Int ist, gibt er die zwei zeilen aus.
das kann man lösen in dem du zu beginn $i=1 setzt und in der Schleife $i++; nimmst, dann wir $i erst nach dem Durchlauf incrementiert.

das die letzte zeile nicht ganz aufgefüllt wird Stellt glaube ich für keinen gängigen Browser ein Problem dar... ist aber natürlich nicht gerade die feinste Lösung...

Slizzzer hat gesagt.:
Oh man, da hängt man an so einem Kleinkram fest *grr*:(
hähä, warum sollte es dir anderst gehen als mir *eg* ?!

tob
 
Ich danke Euch zunächst mal!

Das mit $i auf 1 setzen klappt auch nicht so recht. Jetzt erscheint
in der ersten Reihe eine Zelle weniger. Es wird also alles nur noch mal verschoben.

Ich denke ich schlaf da mal drüber und versuchs morgen noch mal
(Ich hasse Montage!).

So nu erstmal nen Kaffee!;-)
 
Halt stopp! Nicht so schnell aufgeben, das bekommen wir schon noch hin... irgendwann.
Aber so wie sich das anhört hast du wahrscheinlich nur vergessen im Code das ++$i in $i++ zu ändern
also so:
PHP:
$verz=opendir ('../icons/');
   $i = 1;
    while ($file = readdir ($verz)) 
     {  
      if($file != "." && $file != "..") {
      echo "<td class='thread' align='center'><input name='icon' type='radio' value='$file'><img src='../icons/$file' border='0'></td>\n";
      $i++;}
      if(is_integer($i/6)){ echo "</tr>\n<tr>\n"; }
     }
      closedir($verz);
 
Mal eine Frage, warum arbeitet ihr mit is_int Überprüfung und nicht mit dem Modulo Operator % ? Der liefert immer den ganzzahligen Rest einer Division zurück Syntax:
7%2=1
 
Zurück