Dynamische Webseiten mit PHP

Arrays und Schleifen

Arrays

p>Arrays sind Variablen, die ganze Wertelisten enthalten können. In diesen Listen kann jede Zeile durch eine Nummer (Index) referenziert werden.
Durch Angabe des Array-Namens und des Index kann das Array belegt bzw. ausgelesen werden.
Arrays werden später für die Datenbankabfragen noch sehr wichtig werden.

Achtung: Die Zählung beginnt immer bei 0 !

Belegen jeder einzelnen Arrayzeile:
$Adresse[0] = „Hamburg“;
$Adresse[1] = „Berlin“;
$Adresse[$i] = $xyz;

Mit leeren Klammern, wird die nächste freie Zeile im Array belegt:
$Adresse[] = $Wuppertal;

Auslesen einer einzelnen Arrayzeile:

$x = $Adresse[1];
echo $x;

Definition eines kompletten Arrays:

$myArray = array („Paris“, München“, „London“);

mehrdimensionale Arrays

Arrays können mehrdimensional sein, indem in die einzelnen Zeilen wiederum Arrays eingefügt werden. Ein zweidimensionalea Array sähe dann so aus:
$myArray = array („0“, $myArray2, „7“);

Die Ausgabe eines Feldes aus dem zweidimensionalen Array:
$erg = $myArray[1][3];

Assoziative Arrays

In assoziativen Arrays wird nicht über den Index, sondern über Feldnamen auf die Daten zugegriffen:
$kontakt["Name"] = „Siegert“;
$kontakt["Tel"] = „78-1248“;
echo $kontakt["Name"];

Die alternative Definition mit dem Schlüsselwort Array:
$kontakt = array(„Name“=>“Siegert“, „Tel“=>“78-1248“);

Arrayfunktionen

FunktionBeschreibung
$anz = count($array); Liefert die Anzahl der Arrayelemente.
reset(), prev(), pos(), current(), next(), end() Setzt den internen Arrayzeiger.
$erg = key($array); Gibt den Schlüssel des aktuellen Elements bei assoziativen Arrays aus.
unset($arr); leert ein Array

PHP kennt noch weitere Funktionen z.B. zum Sortieren von Arrays etc..


Schleifen

Um Arrays nun sinnvoll verwenden zu können, brauchen wie Schleifen. Mit ihnen kann Element für Element eines Arrays abgearbeitet werden.

foreach

foreach($array as $element) {}
foreach($array as $key => $element) {}

foreach ist ein spezielles Schleifenkonstrukt für Arrays.
Zunächst wird ein interner Zähler auf das erste Element gesetzt. Dann wird das Array schrittweise durchlaufen und jedes Element an $element übergeben. Die Schleife wird automatisch beendet, wenn das Array einmal vollständig durchlaufen ist.

Bei verschachtelten Arrays sähe das dann so aus:

foreach($array as $element) {
foreach($element as $element2) {
...
}
}

while

…solange bis ein bestimmter Zustand eintrifft… Der Test (boolsche Bedingung) wird hier zu Beginn durchgeführt!
Das Beispiel gibt alle ACSII Zeichen von 32 bis 126 aus.

$i = 32;
while ($i < 127) {
echo chr($i).“|“;
$i++;
}

do-while

…solange bis ein bestimmter Zustand eintrifft… Der Test findet hier erst nach dem ersten Durchlauf statt!
Das Beispiel gibt alle ACSII Zeichen von 32 bis 127 aus.

$i = 32;
do {
echo chr($i).“|“;
$i++;
}
while ($i < 127)

for

Diese Schleife arbeitet mit einem Zähler. Nach dem Schlüsselwort for folgt eine Klammer mit drei durch Semikolon getrennte Anweisungen. Der Zähler ist eine Variable (hier $i), die sich ausgehend von einem Startwert (1. Anweisung) solange verändert (3. Anweisung), solange die Bedingung (2. Anweisung) wahr ist.

for ($i = 32; $i<127; i++;) {
echo chr($i).“|“;
}

Schleifenfunktionen

Die Schleifenfunktionen können in jedem Schleifentyp angewendet werden.

continue [Schleifenanzahl] erzwingt den nächsten Schleifendurchlauf
break [Schleifenanzahl] bricht die Schleife ab

exit [(Zeichenkette)] = bricht das aktuelle Skript ab


Anwendungen

Passwortabfrage mit Schleife

<?
# Erzeugen eines zweidimensionalen Arrays
$nutzer1 = array("Paul","123456");
$nutzer2 = array("Ralf","654321");
$nutzer3 = array("Hein","Bl&ouml;d");
$gesamt = array($nutzer1,$nutzer2,$nutzer3);
//-----------------------------
$login = false;
for ($i = 0; $i< count($gesamt); $i++) {
if ($kennung==$gesamt[$i][0] && $passwort==$gesamt[$i][1])
$login = true;
}
if ($login)
echo "richtig";
else
echo "falsch";
?>

Erzeugen einer HTML-Tabelle

Diese Technik wird später oft in Zusammenhang mit Datenbanken gebraucht.

<?
$nutzer1 = array("Paul","123456");
$nutzer2 = array("Ralf","654321");
$nutzer3 = array("Hein","Bl&ouml;d");
$gesamt = array($nutzer1,$nutzer2,$nutzer3);
//----------------------------- MIT FOR-SCHLEIFE
echo "<table border=1>\r";
for ($i = 0; $i< count($gesamt); $i++) {
echo "<tr><td>".$gesamt[$i][0]."</td><td>".$gesamt[$i][1]."</td></tr>\r";
}
echo "</table>\r<hr>\r";
//----------------------------- MIT WHILE SCHLEIFE
echo "<table border=1>\r";
$i=0;
while ($i < count($gesamt)) {
echo "<tr><td>".$gesamt[$i][0]."</td><td>".$gesamt[$i][1]."</td></tr>\r";
$i++;
}
echo "</table>\r<hr>\r";
//----------------------------- MIT DO-SCHLEIFE
echo "<table border=1>\r";
$i=0;
do {
echo "<tr><td>".$gesamt[$i][0]."</td><td>".$gesamt[$i][1]."</td></tr>\r";
$i++;
} while ($i < count($gesamt));
echo "</table>\r<hr>\r";

//-----------------------------
?>

Erzeugen von Menues

Hier eine kleine praktische Funktion, die für myStudy entwickelt wurde.

<?
Parameter:
$values = die Values. Kˆnnen auch gleich $liste sein
$liste = Array aus Eintr?gen
$active = Aktiver array Eintrag, Nicht die Feldnummer, sondern der INHALT muss übereinstimmen!!!
$selname = name des Select PopUps

Aufruf:
<?
include("do_select.php");
$liste = array ("Januar","Februar","M‰rz","April","Mai","Juni","Juli","August","September","Oktober",
"November","Dezember");
do_select($liste,$active,$selname);
?>
Musterarrays:
$liste = array ("Januar","Februar","M‰rz","April","Mai","Juni",
"Juli","August","September","Oktober","November","Dezember");
$liste = array ("1","2","3","4","5","6","7","8","9","10","11","12");
$liste = array ("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17",
"18","19","20","21","22","23","24","25","26","27","28","29","30","31");
$liste = array ("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
*/
function do_select($values,$liste,$active,$selname) {
echo "<select name=".$selname." size=1>";
$len = count($liste);
for ($i=0; $i < $len; $i++) {
echo "<option value=\"".$values[$i]."\"";
if ($liste[$i] == $active) echo " selected";
echo ">".$liste[$i]."\r";}echo "</select>";
}
?>