|
Arrays - was ist das ?
Wir haben jetzt ja schon Variablen kennengelernt, in denen man irgendwelche
Zahlen oder Wörter speichern kann. Arrays sind im Prinzip genau das selbe,
nur viel ausgeklügelter. Stellen wir uns eine Variable wie einen Schrank vor.
Wir wollen etwas speichern und tun zum Beispiel Socken in die erste Schublade von
diesem Schrank hinein. Wir wissen jetzt in dem Schrank sind Socken gelagert (gespeichert).
Jetzt wäre der Schrank mit den Socken in Schublade 1 wie eine Variable.
Was passiert aber wenn wir in die zweite Schublade von diesem Schrank noch Hemden,
in die dritte Schublade Krawatten und in die vierte Schubladen Hosen tun ? Jetzt
wäre dieser Schrank ein Array.
Ein Beispiel:
<?php $schrank[1] = "Socken"; $schrank[2] = "Hemden"; $schrank[3] = "Krawatten"; $schrank[4] = "Hosen";
echo "In Schublade 3 liegen $schrank[3] <br>"; echo "In Schublade 1 liegen $schrank[1] <br>"; ?>
|
Ausgabe: | In Schublade 3 liegen Krawatten In Schublade 1 liegen Socken |
Ein einfaches echo $schrank; wird kein Ergebnis bringen. Wenn man sich
den gesamten Inhalt vom Schrank zwischendurch mal angucken möchte, dann
kann man zum Beispiel den Befehl print_r($schrank); nehmen.
<?php print_r($schrank); ?>
|
Ausgabe: | (
[1] => Socken
[2] => Hemden
[3] => Krawatten
[4] => Hosen
) |
Jetzt sehen wir die Werte die wir ganz oben dem Schrank zugewiesen haben. Es
gibt auch verschiedene Schreibweisen ein solches Array zu bilden. Das oben ist
die einfachste Methode. Wir hätten auch eine andere Nummer als zum Beispiel
4 = Hosen nehmen können. Die Nummerierung bleibt uns überlassen, wir
dürfen nur nicht zwei Werte in der selben Nummer speichern.
Beispiele wie man Arrays bilden kann:
<?php $schrank[] = "Hosen"; $schrank[] = "Krawatten"; $schrank[] = "Hemden";
$schuhschrank = ARRAY("Slipper", "Ballerinas", "Schlittschuhe");
$warenkorb = ARRAY(1=>"Käse", 2=>"Joghurt", 49=>"Wurst"); ?>
|
Bei der ersten Methode vom $schrank[] haben wir extra keine Nummer mit
angegeben. Wenn wir einfach nur eckige Klammern setzen und keine Nummer
angeben, wählt PHP automatisch die nächste freie Nummer.
Beim $schuhschrank haben wir PHP mit ARRAY gesagt, dass
wir ein Array bilden wollen und haben dann durch Komma getrennt einfach gesagt,
welche Werte in diesem Array gespeichert werden sollen. Auch hier haben wir keine
Nummer angegeben, so dass PHP automatisch die Nummern vergibt.
Im $warenkorb haben wir einige Leckereien. Hier haben wir wieder Nummern
vergeben. Hier könnte man zum Beispiel die Artikelnummer oder
andere sinnvolle Nummern nehmen.
Der Sinn von diesen Arrays kann in folgendem Beispiel nochmal näher verdeutlicht
werden. Zu Anfang werden normale Variablen reichen, aber schnell stößt man
an die Grenzen des machbaren:
<?php $einkaufswagen[] = ARRAY("Mortadella"=> ARRAY("art"=>"Wurst", "anzahl"=>5, "preis"=>1.00)); $einkaufswagen[] = ARRAY("Kaese"=> ARRAY("art"=>"Milchprodukt", "anzahl"=>1, "preis"=>1.99)); $einkaufswagen[] = ARRAY("Snickers"=> ARRAY("art"=>"Suesswaren", "anzahl"=>2, "preis"=>2.45));
print_r($einkaufswagen); ?>
|
Wie Du siehst kann man mit Arrays wunderbar Warenkörbe für Online-Shops
realisieren. Würde man nur eine Variable verwenden, könnte man ja nur
einen gekauften Gegenstand speichern. Würde der Kunde mehrere Artikel in den
Warenkorb legen, dann würde dies mit einer einfachen Variable nicht
funktionieren. In ein Array kann man neue Artikel "reinlegen",
aber auch wieder rauslöschen.
Stellt euch vor Ihr wollt Schiffe versenken programmieren !
Ihr habt ein großes Raster, auf welchem Ihr zu jedem Feld in eurem Programm
notieren müsst, ob sich dort etwas befindet oder nicht. Wie will man dies
mit einer Variable machen ? Hierfür braucht man ein Array - und zwar ein
mehrdimensionales.
<?php $feld[3][7] = 1; $feld[4][8] = 1; $feld[2][9] = 1;
if ($feld[3][7] == 1) { echo "Feld ist besetzt !"; } ?>
|
Hier könnte man jetzt zu jedem Feld notieren was sich dort befindet. 0 wäre
zum Beispiel = Feld ist frei und 1 = Feld ist besetzt mit Spieler 1 und 2 = Feld ist
besetzt mit Spieler 2
Die erste Zahl in den eckigen Klammern könnte man für die Nummerierung
der horizontalen Kästchen nehmen und die zweite Zahl in Klammern könnte man
für die Vertikale Achse nehmen. So kann man für jedes Kästchen einen
Zustand speichern und beschreiben, ohne sich 15x14 = 210 Variablen überlegen zu
müssen (für jedes Kästchen eines). Ganz abgefahren wird es, wenn Ihr
jetzt noch weitere Dimensionen hinzufügt - weil zum Beispiel das Schiffe
versenken ein U-Boot versenken ist und unter Wasser ja alles 3 Dimensional ist. Euren
Möglichkeiten sind da kaum Grenzen gesetzt.
Ihr solltet euch erstmal an einfachen Arrays versuchen, die mehrdimensionalen
seien hier erwähnt aber für erste Gehversuche nicht so interessant.
Arrays die vom Server geliefert werden
Es gibt auch Arrays die müsst Ihr gar nicht erst mit Daten füllen. Es gibt
Arrays die sind schon vorhanden wenn Ihr euer Programm startet, so z.B. $_SERVER.
In $_POST sind immer die Daten von Formularen enthalten die man mit HTML erstellen
kann, sofern man diese mit method="post" sendet. Das senden mit method="post" hat den
Vorteil gegenüber method="get", dass die gesendeten Parameter nicht alle in der
Internetadresse übergeben werden, sondern dass Ihr die Übergabe nicht seht.
Ausserdem ist die Länge der Internetadresse begrenzt, während Ihr über $_POST
auch wesentlich größere Datenmengen schicken könnt. Wie man Formulare erstellt
könnt Ihr hier (klick)
nachlesen. In dem Array $_GET werden alle Parameter gespeichert, die in der Internetadresse mit
übergeben werden.
Zum Beispiel: test.php?farbe=gruen&gegenstand=Auto
Dann habt Ihr in $_GET["farbe"] den Wert "gruen" und in $_GET["gegenstand"] das Wort
"Auto" gespeichert.
Achtung: viele programmieren mit der Einstellung am Apachen "Globals = an".
Dies bewirkt, dass man die Parameter aus $_POST und aus $_GET nicht aus diesem Array
abfragen muss. In diesem Fall mit der Internetadresse und den $_GET Parametern wäre
auch noch die Variable $farbe mit "gruen" und die Variable $gegenstand mit "Auto"
belegt.
Bitte nicht angewöhnen die Variablen direkt zu verwenden ! Immer über $_POST und das $_GET Array abfragen !
Es ist unsauber programmiert, birgt Sicherheitsrisiken und auf dem nächsten Server läuft
euer Skript dann warscheinlich sowieso nicht mehr, weil die Globals = aus sind. Man sollte wenn man
Informationen von aussen bekommt diesen auch nie vertrauen. Sicherheitsabfragen sollte man sich
angewöhnen und somit mit Manipulationen von aussen rechnen !
Hier zum Beispiel das $_SERVER array als print_r($_SERVER) Ausgabe:
Dies ist ein Teilausschnitt, aber man kann dem schon viele Daten entnehmen. Unteranderem
sieht man hier welche IP Adresse der Surfer hat ( $_SERVER["REMOTE_ADDR"]; ), welchen
Internetbrowser und Betriebssystem er nutzt ( $_SERVER["HTTP_USER_AGENT"];) und
noch vieles mehr wie Ihr seht.
|