Programmieren mit php und mySQL (Schleifen, Teil 1) - Guru 2.0
Programmieren mit php und mySQL (Schleifen, Teil 1)

Programmieren mit php und mySQL (Schleifen, Teil 1)

Die Entscheidungskommandos sind mit der letzten Hausübung abgeschlossen. Diese war sicher ein wenig schwieriger, aber du hast es sicher geschafft. In diesem Teil beschäftigen wir uns mit Schleifen. Was das ist und welche es gibt, wirst Du gleich nach der Lösung der Hausaufgabe erfahren.

Lösung zu Übung 2.7

Hier solltest Du zu einem gegebenen Datum herausfinden, in welchem Quartal dieses Datum ist. Das erste Problem bestand darin, herauszufinden welcher Wert in $monat steht. Dazu musste die Zeile mit der Wertzuweisung korrigiert werden und in der Folge der Wert mit echo $monat; ausgegeben werden. Dadurch hast Du erfahren, dass in $monat die englische Kurzbezeichnung des Monats steht.

Nun konntest Du, mit ein weniger logischer Überlegung, ein einfaches switch-Konstrukt aufbauen und den gewünschten Wert ausgeben.

Auch hier habe ich wieder einen kleinen Trick angewendet. Dadurch wird sich Deine Lösung von meiner unterscheiden. Du hast sicherlich für jedes Monat eine eigene case-Anweisung eingebaut. Dies ist auch richtig so, denn Du hast ja gelernt, dass nur ein Vergleich mit Gleichheitszeichen möglich ist. Ich ignoriere das einfach und baue bei jeder case-Anweisung eine neue Bedingung ein. Dies ist zwar nicht nach den Vorschriften, funktioniert aber sehr gut.

Ich prüfe auch nur die ersten neun Monate ab, denn wenn das Datum nicht bis zur dritten case-Anweisung vorkommt, muss es logischerweise im 4. Quartal liegen.

[php]<?php
/******************
* Berechnung des Quartals eines Datum
* mit bisher bekannten Befehlen
* Dateiname: uebung_2_7.php
* Funktion: Quartalsberechnung
* erstellt am: 19. Mai 2009, 05:51
* Copyright: Clemens Gull
*/

//Zuweisen der Basiswerte
$datum = ‘Jun 4 2008 11:34PM’;
$monat = date(‘M’, strtotime($datum));

switch ($monat) {
case ($monat == ‘Jan’ || $monat == ‘Feb’ || $monat == ‘Mar’):
$quartal = "1";
break;
case ($monat == ‘Apr’ || $monat == ‘May’ || $monat == ‘Jun’):
$quartal = "2";
break;
case ($monat == ‘Jul’ || $monat <strong></strong>== ‘Aug’ || $monat == ‘Sep’):
$quartal = "3";
break;
default:
$quartal = "4";
}
echo "Das Datum ".$datum." ist im ".$quartal.". 2008";
?>[/php]

Nachdem wir die Hausübung erfolgreich gelöst haben, kommen wir zum zweiten Bereich der Kontrollstrukturen: den Schleifen. Diese Befehlskonstrukte kommen auch in jeder Programmiersprache vor und sind immens wichtig. Schleifen werden immer dann benötigt wenn Befehle mehrfach hintereinander ausgeführt werden sollen. Einerseits unterstütz das unsere Tippfaulheit, andererseits ist es praktischer eine Zeile nicht 100fach zu wiederholen, sondern mit einem einfachen Konstrukt, 100mal ausführen zu lassen.

Schleifen

Wie Du aus dem obigen Satz siehst, wiederholen Schleifen etwas. Zusätzlich haben sie immer eine Abbruchbedingung (wann sollen sie beendet werden). Denn sonst kommt es zu einer Endlosschleife, welche erst aufhört zu arbeiten, wenn das Programm aus dem Speicher entfernt wird. Als erste Art der Schleifen lernen wir eine endliche Schleife kennen. Bei dieser Art bestimmst Du während der Programmierung, wieviele Durchgänge Du haben willst. Stell Dir vor Du willst eine Tabelle mit 10 Zeilen ausgeben, dann ist die Anzahl schon während der Programmierung bekannt.

Namen für Variable

Bevor wir aber wirklich anfangen, erlaube ich mir wieder einmal einen kleinen SideStep. Für Dich als “Noch-Nicht”-Programmierer sind viele Dinge in Anwendungen einfach nicht klar. Der Profi hingegen sieht diese Dinge bereits auf den ersten Blick. Eines davon sind Variablennamen. Ich habe ja schon ganz am Anfang darüber gesprochen, wie man Variablen benennt. Du hast etwas über die Syntax, die Schreibweisen und andere Konventionen gelernt. Zu all diesem gibt es auch ein Ausnahme: die Zählvariablen.

Diese Variablen haben nur eine Funktion, nämlich zu zählen (bspw.: 1, 2, 3, 4, 5, 6, 7). Diese Variablen kommen oft in Schleifen vor und werden duchr eine unausgesprochenes Gesetzt ausserhalb der früher gelernten Normen benannt. In der Mathematik gibt es x, y und z und bei uns Programmierern gibt es $i, $j, $k und $l. Wenn ein Profi eine Einbuchstaben-Variable, wie gerade gezeigt, sieht, denkt er sofort: Da wird irgendwo etwas gezählt. Es gibt noch andere spezielle Namen, aber auf die komme ich erst später zu sprechen.

Zählen für Programmierer

Jetzt denkst Du sicher: Wieso zählen, wir zählen doch alle gleich? Nicht ganz, wir Programmierer sehen die Welt einfach anders. Die meisten Menschen beginnen mit der Zahl 1 zu zählen. Ist ja klar, denn erst mit 1 ist irgendetwas vorhanden. Aber für uns Programmierer ist bereits die Zahl 0 ein Wert, denn auch sie drückt einen Zustand aus. Daher beginnen wir meistens bei 0 zu zählen, also: 0, 1, 2, 3, 4. Und da liegt für Anfänger oft ein Problem. Denn im gezeigt Beispiel haben wir fünf Element gezählt und nicht 4 wie die letzte Zahl vermuten lässt. Du musst das immer im Kopf haben, denn gerade hier passieren oft Fehler.

for

for-Schleifen werden meist dann eingesetzt, wenn Vorgaben für obere bzw. untere Grenzen bei der Erstellung des Programms bekannt sind.

Syntax

for ($zaehlVariable; $abbruchBedingung; schrittWeite) {


}

Parameter

  • $zaehlVariable
    Dies ist ein Variablenname und ein Startwert für die Schleife in der Form: $variable = zahl, zum Beispiel: $i = 0.
  • $abbruchBedingung
    Dies ist eine Vergleichbedingung, wie Du sie von der if-Anweisung kennst. Sie gibt an, wie lange die Schleife laufen soll. Oder (meistens) anders gesagt, wieviele Durchgänge die Schleife haben soll. Dies kann dann so aussehen: $i < 10.
  • schrittWeite
    Mit der Schrittweite gibts Du an wie schnell oder langsam hochgezählt werden soll, meistens wird dies 1 sein. Die Schrittweite wird als Berechnung angegeben, zum Beispiel für Schrittweite 2: $i = $i +2 oder für Schrittweite 1: $i++ (erinnere Dich an die Rechenoperatoren). Mit der Schrittweite kannst Du auch die Anzahl der Durchgänge steuern. Das ist Dir beim Durchdenken sicher klar geworden. Denn Schrittweite 1 wird doppelt so oft ausgeführt wie Schrittweite 1.

Beispiele

[php light=”true”]<?php
//10 numerierte Zeilen ausgeben
for($i = 0; $i < 10; $i++) {
echo $i.". Zeile<br/>";
}
//10 numerierte Zeilen ausgeben
for($i = 0; $i < 20; $i = $i + 2) {
echo $i.". Zeile<br/>";
}
//10 numerierte Zeilen ausgeben
for($i = 1; $i <= 10; $i++) {
echo $i.". Zeile<br/>";
}[/php]

Du siehst an den obigen Beispielen wie unterschiedlich sich eine for-Schleife präsentieren kann. Kopiere die Beispiele und schau Dir einmal die Ergebnisse an.

Zu den for-Schleifen gibt es noch einiges zu sagen. Natürlich würdest Du mit diesem Wissen schon loslegen können und der Rest interessiert Dich vielleicht auch nicht. Aber trotzdem, ein wenig Hintergrundwissen kann nicht schaden, denn erst damit werden schnelle, saubere und fehlerfreie Anwendungen möglich.

Oft stellt sich die Frage: Wird eine for-Schleife ausgeführt, wenn die Abbruch-Bedingung schon bei Beginn wahr ist? Schau Dir mal das Beispiel an:

[php light=”true”]for ($i = 10; $i < 5; $i++)[/php]

Diese Schleife würde nie ausgeführt werden den $i ist nie kleiner als 5. Also damit ist diese grundlegende Frage beantwortet. Aber wie sieht der umgekehrte Fall aus?

[php light=”true”]for ($i = 0; $i > 5; $i–)[/php]

Diese Schleife würde nie beendet, es ist eine Endlosschleife. Denn $i wird bei jedem Durchgang um eins vermindert, also immer kleiner. Daher kann $i nie grösser als 5 werden.

Gerade bei den beiden obigen Beispielen liegen oft die Probleme in der Programmierung. Denn man macht das nicht absichtlich, sondern meistens sind es Tippfehler. Gerade diese Fehler sind sehr schwer zu finden, denn es gibt ja keine Fehlermeldung, sondern die Anwendung macht einfach nicht was sie soll. Daher jede Schleife – und besonders die Bedingung – am Anfang als Programmierer zweimal prüfen, ob alles stimmt.

Die nächste Frage, welche sich ein Programmierer stellt, sind: Wann werden die drei Parameter der Schleife ausgewertet, einmal, bei jedem Durchgang, am Ende der Schleife oder am Anfang?

Der einfachste Fall ist die Zählvariable. Sie wird beim ersten Aufruf der Schleife ausgewerte und festgelegt. Danach wird dieser Parameter “ignoriert”. Die Abbruchbedinung wird bei jedem Durchgang neu ausgewert und das am Anfang der Schleife. Die Schrittweite wird auch bei jedem Durchgang neu berechnet, aber immer am Ende eines jeden Durchganges. Damit ist klar, dass eine komplizierte Berechnung der Abbruchbedingung die Schleife wirklich langsam macht.

Übung 3.1

Es ist wieder soweit, eine neue Übung steht an. Diesmal wollen wir die Tage des Monats Juni 2009 ausgeben. Nein nicht die Namen der Tage, sondern nur 1. 6. 2009, 2. 6. 2009 und so weiter. Jeder Tag soll in einer eigenen Zeile stehen. Es ist wie immer, probiere es zuerst selbst und blende Dir dann erst den Sourcecode ein

[php collapse=”true”]<?php
/******************
* Ausgabe der Tage des Monats Juni
* Dateiname: uebung_3_1.php
* Funktion: Tage ausgeben
* erstellt am: 19. Mai 2009, 16:27
* Copyright: Clemens Gull
*/
//Ausgabe der Daten
for ($i = 1; $i <= 30; $i++) {
echo $i.". 6. 2009<br/>";
}
?>[/php]

Übung 3.2

Die vorherig Übung ist Dir sicher leicht von der Hand gegangen, es war auch nicht so lange. Dieses mal wird es ein wenig schwieriger. Du gibst diesmal die Zeilen 30. Juni 2009, 29. Juni 2009 und so weiter aus. Speichere den Monatsnamen in einer Variablen und gib jeden Wert in einer eigen Zeile aus.

[php collapse=”true”]<?php
/******************
* Ausgabe der Tage des Monats Juni
* Dateiname: uebung_3_2.php
* Funktion: Tage umgekehrt ausgeben
* erstellt am: 19. Mai 2009, 16:29
* Copyright: Clemens Gull
*/
//Basiswerte festlegen
$monat = "Juni";

//Ausgabe der Daten
for ($i = 30; $i >= 1; $i–) {
echo $i.". ".$monat." 2009<br/>";
}
?>[/php]

Auch was war sicher nicht schwer und Du hast es fehlerfrei hingekriegt. Da die for-Schleife ein kompliziertes Befehlskonstrukt ist, lasse ich es für heute gut sein. Ich habe viele Dinge zu diesem Befehl noch nicht erwähnt, das kommt erst wenn wir es wirklich brauchen. Denn zuviel auf einmal wird Dich einfach nur verwirren.

Übung 3.3: “Hausübung: for-Schleife”

Diesmal will ich wieder die Tage in einer Liste ausgegeben haben. Genauso wie in Übung 3.1, aber zusätzlich soll natürlich der Monatsname geschrieben werden. Die Herausforderung liegt aber darin, dass wir die Tage der Monate des 2. Quartals (Mär, April und Mai) ausgeben wolle. Die Schwierigkeit ist, dass Du nur eine einzige for-Schleife verwenden darfst. Du wirst also Variablen und die eine oder andere if-Anweisung brauchen.

In eigener Sache

Ich wünsche Dir wieder viel Erfolg bei den Übungen und auch bei der Hausübung. Ich bin gespannt wieviele mitmachen und auf die Lösung kommen. Ich werde es aber nur erfahren, wenn Du einen Kommentar eingibst. Also schreib ruhig, dass Du die Übungen machst und auch wie es Dir dabei geht. Der Kurs kann für Dich ein riesiger Erfolg werden, wenn Du mir eine Rückmeldung gibst. Denn dann kann ich die weiteren Artikel Deinen Wünschen anpassen.
Trotz meiner Vermutung, dass ich es heute nicht schaffe, gibt es trotzdem die Fortsetzung des Kurses. Morgen wirst Du dann etwas über die nächste Gruppe der Schleifen erfahren.

Information

Diese Artikelserie ist mit dem Tag phpMySQL@Kurs versehen. Damit kannst Du schnell alle Teile des Kurses finden: https://www.guru-20.info/tag/phpMySQL@Kurs

Startseite bzw. Inhaltsverzeichnis des Kurses

Es wurden 2 Kommentare zu diesem Beitrag geschrieben.

Blogheim.at Logo
Diese Website verwendet Cookies - nähere Informationen dazu finden Sie in unserer „Datenschutzerklärung“. Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren und unsere Webseite zu besuchen, oder klicken Sie auf „Cookie-Einstellungen“, um Ihre Cookies selbst zu verwalten.