Mathematische Operatoren /

waswesich

Grünschnabel
Hallo Forumsler

Ich wollte mich an einer Bildergalerie versuchen und habe zu diesem Zweck mehrere Ordner mit verschiedenen mengen an Bilder angelegt
Zu diesem Zweck lies ich mir die Ordner wie folgt berechnen
PHP:
$bilder = (Anzahl Bilder im Ordner)
$reien = floor ( $bilder / 5 );
$rest = $bilder - ( $reien * 5 );
Funktioniert auch soweit einwandfrei bis ich an den Ordner mit etwas über 100 Bildern geriet die anderen Ordner hatten so zwischen 5 und 20 Bilder

Da kam mir der Gedanke das ich das ja seitenweise machen könnte und zwar pro Seite 20 Bilder zu 4 reihen a 5 Bilder und schrieb folgende Zeile zum Script hinzu

PHP:
$seiten = floor ( $reien / 4 );

um das ganze zu testen schrieb ich folgendes Script
PHP:
for ( $bilder = 1 ; $bilder <= 100 ; $bilder++)
  {
   $reien = floor ( $bilder / 5 );
   $rest = $bilder - ( $reien * 5 );
   $seiten = floor ( $reien / 4 );

    echo "<b>Bilder: ".$bilder."</b><br><br>";
    echo "Seiten: ".$seiten."<br>";
    echo "Reien: ".$reien."<br>";
    echo "Rest: ".$rest."<br><br><br><br>";
  }
und schon funktioniert es nicht mehr mit der Berechnung

Die Reihen und der Rest stimmt immer aber das mit der Seiten Berechnung haut einfach nicht hin

Nach etlichen Experimenten kam ich dann zu diesem Script
PHP:
for($bilder=1;$bilder<=111;$bilder++)
  {
   $reien=floor($bilder/5);
   $rest=$bilder-($reien*5);
   $seiten=floor($reien/4)+1;

    for($i=1;$i<=ceil($bilder/20);$i++)
     {$r=($i*20);if($bilder==$r){$seiten--;}}

    echo "<br><b>Bilder: ".$bilder."</b><br>";
    echo "Seiten: ".$seiten."<br>";
    echo "Reien: ".$reien."<br>";
    echo "Rest: ".$rest."<br><br><br><br>";
  }
Jetzt funktioniert es ;-)

Meine Frage wäre nun ob dies
PHP:
   $reien=floor($bilder/5);
   $rest=$bilder-($reien*5);
   $seiten=floor($reien/4)+1;

    for($i=1;$i<=ceil($bilder/20);$i++)
     {$r=($i*20);if($bilder==$r){$seiten--;}}
Eventuell einfacher oder kürzer möglich wäre

Sicher gibt es fertige Bildergalerie-Scripte oder wie man dazu auch immer sagen mag aber die sind eben von anderen und nicht auf meinem mist gewachsen

Würde mich freuen wenn da jemand vielleicht noch ne andere Idee dazu hätte

So noch nen schönen Tag

Bye Bye
 
Weiß nicht genau wie du die Bilder einliest, ich gehe daher mal davon aus, dass die Pfade zu den Bildrn in einem Array vorliegen.
PHP:
<?php
$bilder = array('bild1.jpg', 'bild2.jpg', 'bild3.jpg'); 
$proSeite = 10; 
$proZeile = 2; 
$seite = isset($_GET['seite']) ? intval($_GET['seite']) : 0; 

echo '<table><tr>'; 
for($i = ($seite * $proSeite), $j = (($seite * $proSeite) + $proSeite); $i < $j; $i++) 
{     
	if(!empty($bilder[$i]))
	{
    if($i%$proZeile == 0 && $i > 0) 
    { 
        echo '</tr><tr><td>' . $bilder[$i] . '</td>'; 
    } 
    else 
    { 
        echo '<td>' . $bilder[$i] . '</td>'; 
    }     
  }
  else
	{
		break;
	}
} 
echo '</tr></table>'; 
?>
 
Zuletzt bearbeitet:
Ich denke, daß Dein Problem in der Benutzung von der floor-Funktion liegt. Diese gibt für Deine Problematik die falsche Zahl zurück.
Beispiel:

42 Bilder : 41:5 = 8,4 d.h. Du brauchst 9 Reihen um alle Bilder darzustellen (8 Reihen je 5 BIlder und 1 Reihe mit 2 Bildern) Die floor-Funktion liefert Die aber nur 8 zurück. Wenn Du jetzt pro Seite 4 Reihen haben möchtest dann bekommst Du nach Deiner Rechnung jetzt nur 2 Seiten eigentlich brauchst Du aber 3.
Du mußt also anders rechnen:

Code:
    $bilder = (Anzahl Bilder im Ordner) 
    $reien = floor ( $bilder / 5 );
    if (fmod($bilder/5) != 0) {
       $reihen=$reihen+1;
    }
    $seiten = floor ( $reihen / 4 );
    if (fmod($reihen/4) != 0) {
       $seiten=$seiten+1;
    }
Mit der fmod-Funktion stelle ich fest ob die Division einen Rest liefert. Bei einem Rest muß dann die Reihen bzw. Seitenzahl um eins erhöht werden. Denn Du brauchst um ein Bild darzustellen mindestens eine Reihe und eine Seite.
Die Variable Rest braucht Du eigentlich nicht. Wenn Du Reihen und Seiten bestiommt hast kannst Du über eine For-Schleife dann Deine Seiten aufbauen.

Hoffe es hilft weiter. Mit PHP bin ich auch nicht so geübt. In anderen Programmiersprachen (z.B. Pascal) gibt es einfachere Konstrukte da es dort Funktionen gibt die bei einem Rest immer auf die nächste ganze Zahl aufrunden.
 
Zuletzt bearbeitet:
Zuerst ma vielen dank für die wirklich sehr schnellen antworten

Ich sollte vielleicht noch erwähnen dass ich von PHP gerade mal die so genanten Grundkenntnisse habe

Richtig mAu
Die Pfade zu den Bildern lasse ich in ein Array einlesen und schuppse sie dann in eine
Code:
$_SESSION[$name[$nummer]]
So das ich sie immer und überall zur Verfügung habe
Dein schnipsel hat mich fast überzeugt wenn es nicht die Bilder bis zum wert in $proSeite unterschlagen würde ;-)
Aber mit deinem schnipsel werde ich noch ein wenig experimentieren vielleicht finde ich ja heraus das die ersten Bilder auch angezeigt werden
Trotzdem vielen dank für den Tipp


so nun zu dir Twinsetter
nach testen deines schnipsels bekam ich ein
Warning: fmod() expects exactly 2 parameters
War aber nicht so schlimm denn ich hab den Fehler mit Google gefunden
Jedenfalls bekomme ich mit deinem schnipsel bei
Bilder 1 – 5 : Seiten = 1
Bilder 6 – 10 : Seiten = 2
Bilder 11 – 15 : Seiten = 3 u.s.w.
Funktioniert also leider auch nicht ;-(


Mein lieber Gumbo
Natürlich hab ich mir deinen kleinen wink durchgelesen und die Blätterfunktion von Lenox scheint mir sehr interessant
Mit dieser Funktion werde ich auf jedem fall etwas experimentieren vielleicht komm ich ja zu einem brauchbaren Ergebnis
Auch dir sowie all den anderen vielen dank für den Tipp


Bye Bye
 
Auch wenn es nicht offensichtlich war, ging es mir vor allem um die Ausgabe der Galerie als Liste, die dann beliebig mit CSS formatiert werden kann.
 
Jedenfalls bekomme ich mit deinem schnipsel bei
Bilder 1 – 5 : Seiten = 1
Bilder 6 – 10 : Seiten = 2
Bilder 11 – 15 : Seiten = 3 u.s.w.
Funktioniert also leider auch nicht ;-(
Hast Du Dich da nicht irgendwie vertippt? Vielleicht habe ich aber auch die fmod- funktion falsch interpretiert. Bei mir funktioniert Sie nicht, da mein PHP diese noch nicht unterstützt. Habe mich nochmal schlau gemacht und den Modulooperator benutzt. Hier der neue Code:
Code:
$reihen = floor ( $bilder / 5 );
if ($bilder % 5 != 0) {
  $reihen=$reihen+1;
}
$seiten = floor ( $reihen / 4 );
if ($reihen % 4 != 0) {
  $seiten=$seiten+1;
}

echo $bilder,"<br>";
echo $reihen ,"<br>";
echo $seiten ,"<br>";
Kannst es ja mal ausprobieren wenn Du mal auf diesen Link gehst
http://tsnet.globedns.info/test.html
Wenn eine andere Anzahl Bilder ausprobieren willst dann gebe den folgendermaßen ein:
http://tsnet.globedns.info/test.html?bilder=43

Hoffe es hilft erst mal weiter

Gruß Twinsetter
 
OK Gumbo, habe es zur kentnis genommen. ;-)

und

Cool Twinsetter es Funktioniert

Ich habe natürlich auch einwenig recherchiert und bin zu folgendem Ergebnis gekommen
PHP:
<?
for ( $i = 1 ; $i <= 500 ; $i++ )
  {
   $seiten = ceil ( $i / 20 );
   $reien  = floor( $i /  5 );
   $rest   = $i - ( $reien*5);

    echo "Bilder: ".$i."<br>";
    echo "Seiten: ".$seiten."<br>";
    echo "Reihen: ".$reien."<br>";
    echo "Rest  : ".$rest."<br><br>";
  }
?>
Dies Funktioniert auch einwandfrei ist aber für mich besser zu verstehen :)
Ich weis nicht mehr genau wo ich es gefunden habe auf jedem fall habe ich den ausschlaggebenden Tipp hier im Forum gefunden
Schön zu wissen das einem noch geholfen wird und das umsonst

Bye Bye
 
Zurück