• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Schleife aufteilen?

syuam

Neues Mitglied
hey leute hier erstmal meine Schleife:
PHP:
$code = "<table>\n";
$code .= "<tr>\n";
for($i=1; $i<=12; $i++) {
    $code .= "<td><img src=\"#\" name=\"zahl.$i\" /></td>\n";
}
$code .= "</tr>\n";
$code .= "</table>\n";
echo $code;
mit der folgenden gewünschten Ausgabe:
PHP:
<table> <tr> <td><img src="#" name="zahl.1" /></td> <td><img src="#" name="zahl.2" /></td> <td><img src="#" name="zahl.3" /></td> <td><img src="#" name="zahl.4" /></td> <td><img src="#" name="zahl.5" /></td> <td><img src="#" name="zahl.6" /></td> <td><img src="#" name="zahl.7" /></td> <td><img src="#" name="zahl.8" /></td> <td><img src="#" name="zahl.9" /></td> <td><img src="#" name="zahl.10" /></td> <td><img src="#" name="zahl.11" /></td> <td><img src="#" name="zahl.12" /></td> </tr> </table>
Nun wollte ich, dass $zahl=1 bis $zahl=4 in der ersten Tabellenzeile dargestellt werden, sowie $zahl=5 bis $zahl=8 in der zweiten Tabellenzeile dargestellt werden und $zahl=9 bis $zahl=12 in der dritten Tabellenzeile dargestellt werden.
Mein spontaner Code:
PHP:
// erste Tabellenzeile:
$code1 = "<table>\n";
$code1 .= "<tr>\n";
for($i=1; $i<=4; $i++) {
    $code1 .= "<td><img src=\"#\" name=\"zahl.$i\" /></td>\n";
}
$code1 .= "</tr>\n";
echo $code1;

//zweite Tabellenzeile:
$code2 .= "<tr>\n";
for($i=5; $i<=8; $i++) {
    $code2 .= "<td><img src=\"#\" name=\"zahl.$i\" /></td>\n";
}
$code2 .= "</tr>\n";
echo $code2;

//dritte Tabellenzeile:
$code3 .= "<tr>\n";
for($i=9; $i<=12; $i++) {
    $code3 .= "<td><img src=\"#\" name=\"zahl.$i\" /></td>\n";
}
$code3 .= "</tr>\n";
$code3 .= "</table>\n";
echo $code3;
Nun sind das jedoch drei Schleifen :/ und deswegen wollte ich nachfragen, wie man das logisch verkürzen könnte. wäre echt dankbar für eure Hilfe, lg!
 
Werbung:
Du kannst auch if bedingungen in der einen for schleife packen.

also

PHP:
if($i >= 1 && $i <= 4)

etc.

Versuch es mal damit
 
Schau dir das mal an:

PHP:
$code = "<table>\n";
$code .= "<tr>\n";
for($i=1; $i<=12; $i++) {
    $code .= "<td><img src=\"#\" name=\"zahl.$i\" /></td>\n";
    if($i % 4 == 0 && $i < 12) $code .= "\n</tr>\n<tr>\n";
}
$code .= "</tr>\n";
$code .= "</table>\n";
echo $code;

Mit dem Modulo (%) definierst du eine Ausgabe, die bei jedem 4ten Durchlauf ausgegeben wird, d.h. nach dem 4ten, 8ten, (etc) machst du eine Zeile zu und die nächste auf. Um zu verhindern, dass am Ende eine leere Zeile steht, fragen wir zusätzlich ab, ob $i kleiner 12 ist ;)
 
Werbung:
meinst du so? :
PHP:
// Tabellenzeile 1
if($i >= 1 && $i <= 4) {
    $code1 = "<table>\n";
    $code1 .= "<tr>\n";
    for($i=1; $i<=4; $i++) {
        $code1 .= "<td><img src=\"#\" name=\"zahl.$i\" /></td>\n";
    }
    $code1 .= "</tr>\n";
    echo $code1;
}

// Tabellenzeile 2
if($i >= 5 && $i <= 8) {
    // Schleife..
}

// Tabellenzeile 3
if($i >= 9 && $i <= 12) {
    // Schleife..
}
dann ist der code doch noch länger??
oder was hast du gemeint?
ps:danke für die hilfe!

edit: danke timmo deinen code schaue ich mir gerade an!
lg
 
nein, so meint eich das nicht. Weil so bräuchtest du ja wieder mehr for schleifen.

Das was ich meine ist die if bedingungen in die for schleife zu packen

PHP:
for() {
if()
elseif()
elseif()
}

Aber ich finde Timmer's Antwort auch eleganter.
 
ja timmo´s antwort ist ausgesprochen elegant!
nun wird auch in drei Tabellenzeilen jeweils vier mal das selbe Bild dargestellt.
(so ist es auch erstmal gewollt)
Wüsste noch jemand, wie ich vorgehen muss, damit ich nach eigenem Ermessen ein zweites Bild an beliebigen Stellen einfügen kann?
momentaner code:
PHP:
$code = "<table>\n";
$code .= "<tr>\n";
for($i=1; $i<=12; $i++) {
    $code .= "<td><img src=\"path-1\" name=\"zahl.$i\" /></td>\n";
    if($i % 4 == 0 && $i < 12) $code .= "</tr>\n<tr>\n";
}
$code .= "</tr>\n";
$code .= "</table>\n";
echo $code;
momentane Ausgabe:
PHP:
<table> <tr> <td><img src="path-1" name="zahl.1" /></td> <td><img src="path-1" name="zahl.2" /></td> <td><img src="path-1" name="zahl.3" /></td> <td><img src="path-1" name="zahl.4" /></td> </tr> <tr> <td><img src="path-1" name="zahl.5" /></td> <td><img src="path-1" name="zahl.6" /></td> <td><img src="path-1" name="zahl.7" /></td> <td><img src="path-1" name="zahl.8" /></td> </tr> <tr> <td><img src="path-1" name="zahl.9" /></td> <td><img src="path-1" name="zahl.10" /></td> <td><img src="path-1" name="zahl.11" /></td> <td><img src="path-1" name="zahl.12" /></td> </tr> </table>
nun würde ich z.B. wollen, dass in der zweiten Tabellenzeile das zweite und dritte Bild durch ein anderes Bild ersetzt werden, also
gewünschte Ausgabe:
PHP:
<table> <tr> <td><img src="path-1" name="zahl.1" /></td> <td><img src="path-1" name="zahl.2" /></td> <td><img src="path-1" name="zahl.3" /></td> <td><img src="path-1" name="zahl.4" /></td> </tr> <tr> <td><img src="path-1" name="zahl.5" /></td> <td><img src="path-x" name="zahl.6" /></td> // beachte source <td><img src="path-x" name="zahl.7" /></td> // beachte source <td><img src="path-1" name="zahl.8" /></td> </tr> <tr> <td><img src="path-1" name="zahl.9" /></td> <td><img src="path-1" name="zahl.10" /></td> <td><img src="path-1" name="zahl.11" /></td> <td><img src="path-1" name="zahl.12" /></td> </tr> </table>
wüsste da jemand einen Ansatz? müsste ich da mit array() ran? lg
 
Werbung:
nein, so meint eich das nicht. Weil so bräuchtest du ja wieder mehr for schleifen.

Das was ich meine ist die if bedingungen in die for schleife zu packen

PHP:
for() {
if()
elseif()
elseif()
}

In diesem Fall müsste man trotzdem 3 verschiedene Variablen füllen und anschließend zeilenweise ausgeben, was ja auch nicht Sinn und Zweck der Sache ist ^^


Aber ich finde Timmer's Antwort auch eleganter.

Danke ^^
 
Du kannst hier mit einem Array arbeiten, das die Ausnahmen beinhaltet, etwa so:

PHP:
$pathes = array(6 => 'path-x', 7 => 'path-y'); //Definierte Ausnahmen
$code = "<table>\n";
$code .= "<tr>\n";
for($i=1; $i<=12; $i++) {
    $path = (isset($pathes[$i])) ? $pathes[$i] : 'path-1'; //Wenn Ausnahme definiert, benutze diese, ansonsten 'path-1'
    $code .= "<td><img src=\"$path\" name=\"zahl.$i\" /></td>\n";
    if($i % 4 == 0 && $i < 12) $code .= "</tr>\n<tr>\n";
}
$code .= "</tr>\n";
$code .= "</table>\n";
echo $code;

EDIT: Sorry, ich bin mal wieder am Perl programmieren, heißt natürlich isset statt exists ^^
 
Diesen Käse von HTML-Code ohne Zeilenumbrüche sehe ich mir aus Prinzip hier nicht mehr an.
Was aber auffällt, syuam, du lässt dir wirklich so ziemlich jeden Kleinkram vorkauen. Ich werde den Eindruck nicht los, dass du meist ohne Sinn und Verstand einige Zeilen Quellcode dahin klatscht und wir dann die passende Lösung dazu suchen sollen. Es wäre wirklich schön, wenn du mal langsam anfangen würdest, logisch zu denken. Das ist beim Programmieren nämlich oberste Pflicht. Die simpleste Lösung für dein letztes Problem wäre eine einfache if-Abfrage, obwohl das auch mit einem Array geht. Aber selbst auf ein einfaches if kommst du nicht von alleine!

Ansonsten bin ich aus solchen Threads raus.
 
Werbung:
da es nur eine definierte Ausahme geben sollte:
PHP:
$pathes = array(6 => 'path-x', 7 => 'path-x'); //Definierte Ausnahme, nur eine
sollte ich nun z.b. sehr viele Ausnahmen haben..gibt es die Möglichkeit das array zu kürzen? z.b. so? :
PHP:
$pathes = array(6,7,8,9,10 => 'path-x'); //viele Ausnahmen
oder muss es immer ausgeschrieben werden?
lg
 
Zurück
Oben