Im dritten Teil des PHP Kurses lernen Sie Schleifen und ihre vielfältige Anwendung auf einfache Programmierprobleme kennen und anwenden.
Mit Schleifen lassen sich schnell und elegant Probleme lösen.
Eine Schleife überprüft eine Variable immer wieder auf
eine Bedingung, bis diese erfüllt ist.
Um die Arbeitsweise von Schleifen schnell zu verstehen, hier nun
gleich ein einfaches Beispiel.
$Zahl="5";
auf ihren Wert überprüft, und es wird dann
eine entsprechende Ausgabe gemacht.
<?php
$y="0";
while
($y <="10" )
{
echo "Die Zahl ist $y<br>\n";
$y++;
}
?>
In der ersten Zeile des Skriptes wird die Variable $y definiert.
Ihr wird der Wert "0" festgelegt. Darauf folgt
auch schon die Schleife, eine sogenannte "while"-Schleife.
Ihr wird eine Bedingung gegeben, in der die Variable $y mit
dem Wert "10" verglichen wird. Solange $y nicht
gleich 10 ist, wird der Code, der in der Schleife steht, ausgeführt.
Dieser Code gibt immer wieder den Wert der Variablen $y aus. Am
Ende der Schleife wird die Variable $y um 1 erhöht.
Nach dem ersten durchlauf des Skriptes hat die Variable also den
Wert 1, nach dem zweiten durchlauf den Wert 2 usw. bis die Bedingung
erfüllt ist.
Ist dies der Fall, dann wird die Schleife verlassen.
Das Konstrukt für eine while-Schleife sieht so aus:
while
(Bedingung)
{
//
Code, wobei über den Code die Bedingung wahr gemacht werden
muss
}
Wenn die Bedingung aber, aus welchem Grund auch immer nicht erfüllbar
ist, dann haben Sie eine Endlosschleife erschaffen. Sie läuft
und läuft immer weiter, ihre Bedingung ist nie erfüllt.
Was bringt jetzt eigentlich eine Schleife?
Aus dem Beispiel wird nicht ganz klar, wozu man eine einfache Schleife
benötigt. Klar ist, für ein solches Skript wie oben würden
Sie eine Menge Schreibarbeit in if-Konstrukte investieren müssen,
um den gleichen Effekt zu erreichen.
Doch folgendes Beispiel zeigt den Anwendungszweck in Bezug auf ein
numerisches Array (also ein Array mit einem Index aus Zahlen).
<?php
$prog_sprache[0]="PHP";
$prog_sprache[1]="Perl";
$prog_sprache[2]="ASP";
$y="0";
$count= count($prog_sprache)
– 1;
while
($y <= $count)
{
echo "Wir Programmieren
mit $prog_sprache[$y]<br>\n";
$y++;
}
?>
Die Ausgabe des Skriptes ist nacheinander:
Wir Programmieren mit PHP
Wir Programmieren mit Perl
Wir Programmieren mit ASP
Der Code ist schon schwieriger. Im Teil 1 des Kurses haben Sie dieses
Array bereits kennen gelernt. Die Variable $y ist wiederum
unsere sogenannte Zählvariable, doch wie steht es um die Variable
$count, welchen Wert hat diese.
Bei der Definierung der Variablen $count wird auf eine von
PHP vordefinierte Funktion zurückgegriffen. Die Funktion count($Array)
ermittelt die
Anzahl der Inhalte eines Arrays. Sie ermittelt also, wieviele Zuweisungen
ein Array hat. In diesem Fall sind das drei Zuweisungen,
nämlich die der Namen der Programmiersprachen. Die Frage ist
nun, warum wir -1 von dem Wert abziehen.
Die Erklärung ist manchen vielleicht schon klar, aber kommt
erst ein wenig später.
Nachdem wir nun die Anzahl der "Programmiersprachen kennen,
können wir diese in eine Bedingung einbauen. Die Schleife wird
so oft durchlaufen, bis die Zählvariable den Wert von $count
erreicht hat. Nach der Subtraktion von -1 ist das also 2.
Insgesamt läuft die Schleife dreimal durch (von 0 bis 2). Dabei
wird eine einfache Ausgabe des Arrays vorgenommen. Dies ist eigentlich
auch schon die Erklärung für die Verminderung von $count
um -1, da sonst die Schleife insgesamt vier mal durchlaufen würde.
Bei einem numerischen Index wird immer von 0 aus gezählt. Von
0 – 2 sind insgesamt 3 Durchläufe, genauso viele Inhalte, wie
im Array vorhanden sind.
Bei dem ersten durchlauf hat $y noch den Wert 0. Durch $prog_sprache[$y]
wird also $prog_sprache[0]
ausgegeben, und das ist nichts anderes als die Zeichenkette "PHP".
Bei dem zweiten Durchlauf ist der Wert von $y schon 1, deshalb wird
$prog_sprache[1],
folglich also "Perl" ausgegen, bis die Bedingung erfüllt
ist.
Die Bedingung schon früher erfüllt?
Innerhalb einer Schleife können Sie eine Variable auf mehrere
Werte überprüfen. Wir möchten bei dem obigen Beispiel
nur herausfinden, welcher Inhalt des Arrays "Perl" ist,
und mit dieser Erkenntnis die Schleife schon frühzeitig verlassen.
Es wird lediglich eine kleine if-Bedingung eingebaut, die bei jedem
Durchlauf den Wert von $prog_sprache[$y] mit "Perl" vergleicht,
und dann die Schleife verlässt.
Dies macht folgendes Skript:
<?php
$prog_sprache[0]="PHP";
$prog_sprache[1]="Perl";
$prog_sprache[2]="ASP";
$y="0";
$count= count($prog_sprache)
– 1;
while
($y <= $count)
{
if ($prog_sprache[$y]
== "Perl")
{
echo "Wir haben Perl (-:<br>";
exit;
}
echo "Wir Programmieren
mit $prog_sprache[$y]<br>\n";
$y++;
}
?>
Der Rest des Skriptes ist wie gehabt. Die Anweisung zum frühzeitigen
Verlassen des Skriptes ist exit;.
Diese Methode kann ebenfalls bei drohenden Endlosschleifen angewandt
werden.
Die for-Schleife
Viele Programmieranfänger haben speziell vor der for-Schleife
regelrecht Angst. Sie wirkt so kompliziert, ist aber bei näheren
Betrachten eigentlich leicht zu verstehen.
Dieses einfache Beispiel erzeugt dasselbe Ergebnis, wie unsere erste
while-Schleife, die wir kennen gelernt haben.
for
($y="0";
$y<="10";
$y++)
{
echo
"Die Zahl ist $y<br>\n";
}
Wie gesagt, der Code scheint schwieriger, doch bei genauen Betrachten
lässt sich eine totale Äquivalenz entdecken. Die einzelnen
Teile der for-Schleife trennen sich durch ein Semikolon. Sie stellen
folgendes dar.
1. Definition der Zählvariable
2. Die Bedingung
3. Was mit der Zählvariable geschehen soll.
Und schon ist das Geheimnis der for-Schleife gelüftet! Die
for-Schleife sollte so keine Probleme mehr machen. Es werden alle
drei Teile, die bei der while-Schleife in verschiedenen Abschnitten
definiert werden, auf einmal, in einer Zeile definiert.
Zum besseren Verständnis nun das Beispiel mit den Programmiersprachen
auf die for-Schleife übertragen.
<?php
$prog_sprache[0]="PHP";
$prog_sprache[1]="Perl";
$prog_sprache[2]="ASP";
for
($y="0";
$y<=count($prog_sprache)
– 1;
$y++)
{
echo "Wir Programmieren
mit $prog_sprache[$y]<br>\n";
}
?>
Vielleicht ist ihnen aufgefallen, das die Definition der Variable
$count jetzt komplett wegfällt. Dies ist aber kein muss. Sie
können $count extern definieren, und dann nur über die
for-Schleife die Variable $count in die Bedingung einbauen.
Die foreach-Schleife
Die foreach-Schleife soll unser letztes Konstrukt für den PHP
Einsteigerkurs sein. Sie wurde mit PHP 4.0 neu eingeführt,
und dient speziell der Ausgabe von Arrays. Der Aufbau und das Handling
sind ebenfalls einfach gehalten worden. Das besondere an der foreach-Schleife
ist, dass man sie auch auf mehrdimensionale Arrays anwenden kann.
Der Grundaufbau sieht so aus:
foreach
($array as $elem)
{
//
Code
}
Hierbei wird für das Array $array die jeweiligen Inhalte ermittelt,
und der Variablen $elem zugewiesen.
Das ganze auf unser Beispiel angewendet:
<?php
$prog_sprache[0]="PHP";
$prog_sprache[1]="Perl";
$prog_sprache[2]="ASP";
foreach
($prog_sprache
as $elem)
{
echo "Wir Programmieren
mit $elem<br>\n";
}
?>
Die Ausgabe bleibt natürlich gleich. Bei jedem Durchlauf erhalt
$elem einen neuen Wert, eben den in der Reihenfolge kommenden Wert.
Wie kann man nun aber den Index ermitteln?
Bei einer while-Schleife haben wir den Wert immer über den
Index ermittelt. Was nun aber, wenn der Index eine Zeichenkette
ist, es sich um ein assoziatives Array handelt? Nur eine kleine
Änderung ist notwendig.
Hier ein Beispiel:
<?php
$user[id]="45";
$user[name]="Hans Guenter";
$user[email]="hans@guenter.net";
foreach
($user
as $index=>$elem)
{
echo
"$index : $elem<br>\n";
}
?>
Die Erweiterung $index=>$elem
erreicht das Ziel. In der Variablen $index wird nun der Name des
Index gespeichert, in $elem ist der Inhalt.
Bei einem assoziativen Array, welches vielleicht so aufgebaut ist,
muss anders vorgegangen werden.
$user[45]["id"]="45";
$user[45]["name"]="Irgendwer";
$user[45]["email"]="irgendwer@was.com";
Hier muss zunächst das erste Array mit einer for-Schleife abgearbeitet
werden, sodass man genau den User bzw. den Index des Arrays ermittelt,
welches die gewünschten Userdaten enthält. Dieses kann
dann mit einem foreach-Konstrukt abgearbeitet werden.
Dies ist eine kleine Anregung an Sie!
Ich hoffe der Kurs hat ihnen einen ersten Einstieg in die Welt des
Programmierens mit PHP gegeben. Viel Erfolg!
(tf)
Auch hier finde ich einen kleinen, aber durchaus wichtigen Fehlerteufel. Ich weiß, langsam nerve ich. 3 Posts innerhalb von einer Stunde. Ok, bin halt nachtaktiv.
Zum Fehler.
Er befindet sich im Abschnitt: Die Bedingung schon früher erfüllt? – die while-Schleife
dein Code endet nachdem Perl gefunden wurde. Für dein Beispiel durchaus machbar. Allerdings ist das im großen gesehen nicht ganz richtig. Der Code, der nach der while-Schleife kommt (wo bei deinem Beispiel halt keiner mehr ist) würde einfach ignoriert werden. Also das Script hällt an der stelle einfach an.
<?php
$prog_sprache[0]="PHP";
$prog_sprache[1]="Perl";
$prog_sprache[2]="ASP";
$y="0";
$count= count($prog_sprache) – 1;
while ($y <= $count)
{
if ($prog_sprache[$y] == "Perl")
{
echo "Wir haben Perl (-:”;
#exit;
$y = $count;
}
echo “Wir Programmieren mit $prog_sprache[$y]\n”;
$y++;
}
?>
Würde das script weiterlaufen lassen. Allerdings noch mit der letzten ausgabe von ASP. wenn wir das nun nicht mehr ausgeben lassen wollen, modifizieren wir die while schleife nochmals:
<?php
$prog_sprache[0]="PHP";
$prog_sprache[1]="Perl";
$prog_sprache[2]="ASP";
$y="0";
$count= count($prog_sprache) – 1;
while ($y <= $count)
{
if ($prog_sprache[$y] == "Perl")
{
echo "Wir haben Perl (-:”;
#exit;
$y = $count+1;
$gefunden = true;
}
if ($gefunden != true)
{
echo “Wir Programmieren mit $prog_sprache[$y]\n”;
$y++;
}
}
?>
Dann läuft auch späterer Code noch weiter, die while-schleife wurde beendet und die ausführung des scriptes nicht abgebrochen. 🙂
Ich nehme natürlich alles zurück, wenn man mir sagt, das dein Ziel war, den eventuell nachfolgenden Code abzubrechen. 🙂
Gruss,
Carsten