Problem mit Kombination For und While

Liz

Grünschnabel
Hey Leutz!

ich hänge derzeit an einem Script wo ich eine Kombination von while und for benötige. (?)

Ich lese aus der DB datensätze aus mit unbekannter Anzahl. Das ganze geschieht über while und läuft auch sauber.

PHP:
while ($daten = mysql_fetch_assoc($result)
{
    $erg .="<div class=\"erste\">";
    $erg .="...alle weiteren Elemente die ich benötige...";
    $erg .="</div>";
}

Nun muss ich das ganze aber irgendwie so umbasteln, dass ich die Anzahl der Beiträge zähle und sage "Beitrag 1-3 in div class="erste"" und alle anderen - in 3er Gruppen! - jeweils in eine div class="next". (namen sind hier exemplarisch)

ich kann zwar mit for 3-er Schritte vorgeben ... aber das klappt dann nicht in Kombination mit while, da dass ja wieder alle datensätze ausliest und meine "gruppierungswünsche" ignoriert.

Bei meinen bisherigen Versuchen wirft er mir entweder jeden Beitrag 3x aus oder gar nicht oder erzählt mir als Fehlermeldung dass das Datenvolumen zu groß sei :D ... also alles in allem kein vernünftiger Ansatz....

Habt ihr eine Idee?
Sinn und zweck der Party ist, dass ich ich im Ergebniss folgenden Aufbau habe:

HTML:
<div class="erste">
<p>-> hier stehen dann Einträge 1 bis 3</p>
</div>

<div class="next">
<p>-> hier stehen dann Einträge 4 bis 6</p>
</div>
<div class="next">
<p>-> hier stehen dann Einträge 7 bis 9</p>
</div>

Wieviele Einträge es in Summe sind, weiß ich wie gesagt nicht - weshalb ich die Daten über while auslese.....

Hoffe ihr könnt mir folgen und helfen .....
... bin dankbar für jede Idee und Tip ....
 
Hallo Liz,

PHP:
$i = 0;
while ( $daten = mysql_fetch_assoc( $result ) ) {
    if ( $i == 0 || $i % 3 == 0 ) {
        $erg.= '<div class="'.( $i == 0 ? 'erste' : 'next' ).'">';
    }

    $erg.= '...alle weiteren Elemente die ich benötige...';

    if ( $i != 0 && ++$i % 3 == 0 ) {
        $erg.= '</div>';
    }
}

if ( $i % 3 != 0 ) {
    $erg.= '</div>';
}

das hab ich jetzt aber wirklich nur auf die Schnelle gemacht und nicht getestet. Wenn es nicht klappt, poste mal bitte was nicht klappt.

Gruß
 
  • Gefällt mir
Reaktionen: Liz
DANKE Raisch für deine Antwort - und Arbeit. :-) ich seh zu dass ich es heut abend noch austeste (spätestens morgen).

Gebe aufjedenfall ne Rückmeldung.

Grüße
 
Hallo,

also - habe die Zeilen ausprobiert - klappt leider nicht.

Ergebnis ist wie folgt:

HTML:
<div class="erste">
	<p>Ich bin der 1. Datensatz</p>
    <div class="erste">
	<p>Ich bin der 2. Datensatz</p>
    	<div class="erste">
		<p>Ich bin der 3. Datensatz</p>
        <div class="erste"><p>Ich bin der 4. Datensatz</p></div>
		</div>
   </div>
</div>

Das Problem dass er die div´s nicht korrekt schließt liegt wohl hieran.
PHP:
if ( $i != 0 && ++$i % 3 == 0 )
		{
        $erg.= '</div>';
   }

bzw. legt er alle Datensätze (habe es hier zu testzwecken erstmal mit 4 in Summe getestet) alle in div class="erste". (div class next kommt nicht)
 
Arrays bieten sich hier an
PHP:
//Alle Daten in ein array zusammenfassen
while ($row = mysql_fetch_assoc($result)){
    //Die Daten bereits in das Ausgabe-Format bringen
    $data[] = "Index {$row['id']} hat den Wert '{$row['value']}'";
}

//Die Daten in 3er-Parts aufteilen
$parts = array_chunk($data, 3, true);

//Alle 3er-Parts ausgeben
foreach($parts as $index => $part){
    //Prüfen ob es sich um den ersten Part handelt ($index == 0)
    echo $index == 0 ? '<div class="first">' : '<div class="next">';
    //Alle Details des Parts mit einem Zeilenumbruch getrennt ausgeben
    echo implode('<br />', $part);
    echo '</p></div>';
}
 
Geht aber auch wunderbar innerhalb einer Schleife :)

PHP:
$erg = '';
$i = 0;
while ( $daten = mysql_fetch_assoc( $result ) ) {
    if ( $i == 0 || $i % 3 == 0 ) {
        $erg.= '<div class="'.( $i == 0 ? 'erste' : 'next' ).'">';
    }

    $erg.= $daten['Feldname'].( ( ++$i ) % 3 == 0 ? '</div>' : '' );
}

if ( $i % 3 != 0 ) {
    $erg.= '</div>';
}

echo $erg;

Diesmal hab ich es zur Sicherheit auch getestet.

Gruß
 
Zuletzt bearbeitet:
Zurück