2009-08-15 4 views
1

Wie können Sie die folgende While-Schleife zu einem for -loop in PHP konvertieren?PHP-While-Schleife in eine For-Schleife konvertieren

while($row2 = pg_fetch_row($result_tags) 

Während -loops sind eine Quelle von Fehlern für mich. Ich sehe die while-Schleife wie folgt.

for ($i = 0 ; $i < count(pg_fetch_row($result_tags)) ; $i++) 
+4

Der Fehler fehlt nicht) in Ihrer while-Anweisung, oder? –

+2

Welche Art von Problemen haben Sie mit der While-Schleife? – outis

+0

Vielen Dank für Ihre Antworten! –

Antwort

9

Sie können das while nicht in ein for konvertieren.

for Schleifen werden für inkrementelle Schleifen verwendet. while Schleifen werden zum Ausführen von Code verwendet, bis eine Bedingung false lautet. Während die meisten for Schleifen können einfach in while Schleifen (for Schleifen sind nur eine syntaktische Erweiterungen von while Schleifen) konvertiert werden, ist das Gegenteil nicht immer möglich.

Betrachten Sie die folgende Schleife:

while($row = pg_fetch_row($result)) { } 

Diese Schleife wird ausgeführt, bis pg_fetch_row() eine falsy value zurückgibt.

Hinweis: Die richtige Syntax für eine solche Schleife wäre:

    while(($row = pg_fetch_row($result)) !== FALSE) { }

Leider ist die nächstgelegene Sie mit einer for Schleife kommen kann, ist die folgende:

for(; $row = pg_fetch_row($result) ;) {} 

Die sich genauso verhalten wie die while Schleife sowieso.

Hinweis: Auch hier ist die richtige Syntax für eine solche Schleife wäre:

    for(; ($row = pg_fetch_row($result)) !== FALSE ;) { }

Ich denke, Sie sollten in Ihrem Code zurück und finden Sie genau die Ursache des Problems anstatt die Verwendung der while Schleife zu beschuldigen.

pg_fetch_row() gibt ein Array von Spalten zurück, so dass Sie count() nicht darauf verwenden können.

Die nächstgelegene Sie mit einer for Schleife kommen würde mit pg_num_rows als solche:

for($i = 0; $i < pg_num_rows($result); $i++) { 
    $row = pg_fetch_row($result); 
} 

Aber ich persönlich finde, dass unnötig ausführlich und offen für weitere Probleme.

+2

+1. Diese Antwort könnte eine Erklärung für den "! == FALSE" -Test verwenden, nämlich dass ein leerer Array mit einem FALSE jongliert wird und die Schleife beendet wird, obwohl 'pg_fetch_row (...)' eine Zeile zurückgegeben hat. Wenn die Zeilen keine Spalten haben, sollten Sie die Schleife natürlich überspringen. Außerdem ist der "! == FALSE" Test eine Frage der Semantik, nicht der Syntax. – outis

+0

Ja ... aber man kann nicht "die richtige Semantik" sagen ... Deshalb habe ich Syntax gesagt. –

1

Warum möchten Sie dies tun? Der bessere Weg besteht darin, $i = 0 zu deklarieren/instanziieren und dann am Ende der Schleife while zu inkrementieren.

5

in der anderen Richtung, ein for-Schleife:

for (init; test; incr) {body;} 

entspricht:

init; 
while (test) { 
    body; 
    incr; 
} 

Das heißt, eine Schleife für eine besondere Art der while-Schleife ist. Persönlich sehe ich nicht, wie das Konvertieren der while-Schleife, die Sie einer for-Schleife geben, Fehler reduziert.

+0

Danke für das zeigen. –