PHP 4.3

6.4 Schleifen und Arrays

Neben reinen Rechen- oder Zähloperationen eignen sich Schleifen insbesondere dazu, Arrays auszugeben oder zu manipulieren. Wir möchten dies anhand einiger Schleifen und Array-Funktionen demonstrieren.

Den Einstieg dazu bilden die bereits vorgestellte do-while-Schleife und einige Array-Funktionen, die wir Ihnen erst an dieser Stelle vorstellen möchten, da ihr Einsatz nun im Zusammenspiel mit Schleifen erfolgen kann. Der Zeiger (engl. Pointer), von dem in den nachfolgenden Erläuterungen die Rede ist, bezeichnet eine Art Variable, die keinen eigenen Wert speichert, sondern auf eine bestimmte Position im Array verweist. Bildlich können Sie sich einen solchen Array-Zeiger als Gabelstapler in einem Warenlager vorstellen, der immer genau jene Regalfächer be- und entlädt, vor denen er sich aktuell befindet. Nach der Erstellung des Arrays befindet sich der Zeiger beim ersten Element des Arrays.

reset(Array)

setzt den internen Zeiger auf das erste Element.

end(Array)

setzt den internen Zeiger auf das letzte Element.

current(Array) und pos(Array)

Liefert den Inhalt des aktuellen Array-Elements zurück. Zeigt der Zeiger auf ein Array-Element außerhalb der Elementenliste liefert die Funktion false zurück. Achtung: Enthält das Element selbst false oder einen Wert, der innerhalb von Bedingungsprüfungen zu false konvertiert, kann es zu unbeabsichtigten Abbrüchen bei Schleifen kommen.

next(Array)

Setzt den internen Zeiger zum folgenden Element weiter. Sind keine Elemente mehr vorhanden, liefert die Funktion false zurück.
Achtung: Enthält das Element selbst false oder einen Wert, der innerhalb von Bedingungsprüfungen zu false konvertiert, kann es zu unbeabsichtigten Abbrüchen bei Schleifen kommen.

prev(Array)

Setzt den internen Zeiger um ein Element zurück. Sind keine Elemente mehr vorhanden, liefert die Funktion false zurück.
Achtung: Enthält das Element selbst false oder einen Wert, der innerhalb von Bedingungsprüfungen zu false konvertiert, kann es zu unbeabsichtigten Abbrüchen bei Schleifen kommen.


Folgendes Skriptbeispiel demonstriert den Einsatz dieser Funktionen. Das Augenmerk möchten wir auf die Verwendung der do-while-Schleife richten. Natürlich hätten wir auch die häufiger zum Einsatz kommende while-Schleife nutzen können. Für dieses Skript ist es aber sinnvoll, dass die Bedingungsprüfung erst nach dem Anweisungsteil erfolgt. Da die Funktionen next() und prev() in der Bedingungsprüfung nicht nur die Aufgabe übernehmen, den Abbruch der Schleife zu steuern, sondern vor allem für das Durchlaufen des Arrays verwendet werden, würde beim Einsatz der while-Schleife das erste bzw. letzte Element des Arrays nicht angezeigt werden. Mit einer do-while-Schleife kann dagegen sichergestellt werden, dass der Schleifenrumpf einmal durchlaufen wird, bevor die Abbruchbedingung überprüft wird.

Das Praktische und zugleich Verhängnisvolle an current(), next() und prev() ist, dass wir die Funktionen next() und prev() direkt in der Bedingungsprüfung einer do-while-Schleife verwenden können (was zum Abbruch der Schleife führt, sobald das Ende der Elementenliste erreicht ist). Andererseits kann diese Herangehensweise zu Problemen führen, wenn Array-Elemente false, einen leeren Wert oder 0 enthalten. In diesem Fall konvertiert das Ergebnis in der Bedingungsprüfung ebenfalls zu false, was die Schleife mit einem, in diesem Fall unerwünschten, Abbruch quittieren würde. Sie sollten diese Methode daher nur dann zur Anwendung kommen lassen, wenn Sie absolut sicher sind, dass das Array keine entsprechenden Elemente enthält.

<html> <body> <h1>Besuchsübersicht</h1><hr>
<form action="bsp_605i.php" method="get">
<nobr>Sortierung:
<input type="submit" name="sortierung" value="Aufsteigend"> 
<input type="submit" name="sortierung" value="Absteigend">
</nobr>
</form>
<?php

  $besuche[0] = "14.02.2001";
  $besuche[1] = "17.02.2001";
  $besuche[2] = "28.02.2001";
  $besuche[3] = "06.04.2001";
  $besuche[4] = "07.04.2001";
  $besuche[5] = "09.04.2001";
  $besuche[6] = "17.06.2001";
  $besuche[7] = "18.06.2001";
  $besuche[9] = "30.07.2001";

   reset($besuche);

  if ($HTTP_GET_VARS["sortierung"] == "Aufsteigend") {
    do {
      echo current($besuche) . "<br>";
    } while (next($besuche));

  } else {
     end($besuche);
    do {
      echo current($besuche) . "<br>";
    } while (prev($besuche));
  }

?>
</body>
</html>

Kommentare (0)

Ihr Kommentar

Name