Arrays
In einem Array könnt Ihr mehrere Werte zusammenschließen, die semantisch
verwandt sind. Jedes Element ist entweder über einen eindeutigen Namen (assoziatives Array) oder über eine Nummer (numerisches Array) ansprechbar, den sogenannten Schlüssel.
Ein Array ist also eine Ansammlung von Schlüssel-Wert-Paaren. Sofern Ihr beim Hinzufügen eines Elements zum Array keinen Schlüssel vergeben, wird automatisch eine fortlaufende
Nummer verwendet, beginnend bei 0.
Beispiel:
Zunächst wird das Array leer initialisiert. Dies geschieht mit dem Sprachkonstrukt.
- array();
Dann wird ein Element hinzugefügt, das fortan über den Bezeichner $array[0] angesprochen und verändert werden kann.
Die leere Initialisierung müsst Ihr nicht voranstellen. PHP ist auch in diesem Fall sehr kulant und quittiert das Befüllen
eines nicht existenten Arrays nicht mit einer Fehlermeldung.
Ihr müsst nicht zwingend eine fortlaufende Reihenfolge der Schlüssel enthalten. Im Falle eines assoziative Arrays ist eine
nummerische Reihenfolge auch nicht immer möglich. PHP hält für jedes Array, das Ihr erstellt, eine interne Ordnung
aufrecht. Die Ordnung eines Arrays wird nur dann verändert, wenn Ihr das Array nach den enthaltenen Werten sortiert.
Durch die folgende Anweisungen werden die Arrayfelder 3 und 5 belegt.
Die Schlüssel 1, 2 und 4 wurden somit ausgelassen. Die Daten, die Ihr in dem Array speichern, können zudem von unterschiedlichen
Datentypen sein. Sie können beispielweise Strings mit Zahlen mischen.
Sofern Ihr nur skalare Werte in einem Array speichern, also Zeichenketten, boolesche Warheitswerte sowie Ganz- und Fließkommazahlen,
spricht man von einem eindimensionalen Array. Allerdings kann ein Arrayfeld auch in ein weiteres Array enthalten. Somit entsteht eine
Hierarchie, ein sogenanntes mehrdimensioanles Array.
+
Das Unterarray in $array[10] wurde nicht leer initialisiert, sondern mit vier Werten befüllt. Es hat keine eigenen Namen, sondern ist anonym.
Die Werte des Unterarrays sind über die Schlüssel $array[10][0] bis $array[10][3] ansprechbar. Die vorangegangen Beispiele, zeigen, dass
Ihr das Sprachkonstrukt array() verschiedener Weise benutzen könnt. Zum einen ist die leere Initialisierung eines Arrays möglich.
Zum anderen lassen sich damit Arrays in einem Schritt erstellen und befüllen. Allerdings gilt dies nicht nur für numerische Arrays so wie bei
array('a', 'b', 'c', 'd') der Fall war. Ebenso gut könnt Ihr den Werten nicht numerische und unsortierte Bezeichner geben:
Ein Schlüssel-Wert-Parr wird durch den Operator=> verbunden. Auch für assozitive Arrays bleibt die definierte Ordung der Elemente erhalten,
auch wenn kein Sortierung besteht.
Beispiel:
Die eckigen Klammern sind für ein abgekürzte Syntax, die dem array() gleichzustellen ist. Wie mit vielen anderen Abkürzungen auch, empfehle ich
Euch: Diese Schreibweise könnt Ihr euch auch angewöhnen, wenn Ihr erst einmal mit PHP vertraut seid. Für die ersten Schritte solltet Ihr die ausgeschriebene
Form wählen, um sich besser in Euren Programmen zurechtzufinden. Dann seht Ihr auf den ersten Blick, ob es sich bei einer Variablendefinition um ein Array
handelt oder nicht.
Beispiel:
Eine Sortierung der Schlüsseln mit ksort($beispiele) führt letztlich zu folgenden Aufstellung:
Arrays lassen sich genau wie Strings durschsuchen. Dazu dienen die beiden Befehle:
- bool in_array()(mixed $suche, array, $array[, bool $typ])
- mixed array_search(mixed $suche, array, $array[, bool $typ])
Gesucht wird nach den Werten und nicht nach den Schlüsseln im Array. Im ersten Fall wird nur
true oder false zurückgegeben, je nachdem, ob $suche in $array vorhanden ist. Die Funktion
array_search() hingegen liefert im Erfolgsfall den Schlüssel; bei Missfolg wird auch false
zurückgeliefert. Als Beispiel soll wieder $städte dienen, und zwar in der From, in der es ursprünglich definiert wurde:
Spoiler anzeigen
Der dritte optionale Parameter schaltet zwischen typsicherer und nicht typsicherer Suchmethode um. Im Standartfall ist
$typ auf false gesetzt, dabei wird mit dem Operator == verglichen, und die Suche ist nicht typsicher. Bei $typ = true wird
stattdessen == für die Suche verwendet.
Der Parameter $suche kann unterschiedliche Datentypen besitzen - deswegen auch die Angabe des Pseudo-Datentyps mixed.
Dies umfasst nicht nur skalare Datentypen. Ebenso gut lässt sich in Arrays auch nach Arrays suchen. Um die zu verdeutlichen,
führen wir die Suche in $array durch, das wir in diesem Abschnitt zuallererst definiert hatten:
Spoiler anzeigen
Merke: Um in einem Array nach einem Schlüssel zu suchen, könnt Ihr den Befehl
- bool array_key_exist(mixed $suche, array $array)
benutzen.
Analog zu in_array() erhaltet Ihr dabei nur true oder false als Antwort. Alternative
dazu könnt Ihr allerdings auch die Existenz über die allgemeine Funktion isset() erfragen.
Beide kommen zu indentische Ergebnisse:
Spoiler anzeigen
Jedes Array hat einen internen Zeiger, der immer auf eines der bestehende Elemente verweist.
Dieser Zeiger wird als beispielweise beim Durchlaufen des Arrays sukzessive über alle Felder bewegt,
um jedes Element genau einmal anzusprechen. Das geschieht transparent, das heißt, das Bewegen
des Zeigers wird Euch vom Parser abgenommen. Allerdings könnt Ihr den Zeiger auch manuell verändern.
Dazu gibt es eine Reihe von Befehlen, die in (kommenden Fortsetzung zu erkennen sind.).
Das Array ist demnach eine sotierte Liste von Feldern nur skalare Werte enthalten, es sich also um ein
eindimensionales Array handelt. In mehrdimensionalen Arrays wird die Zeigerstruktur demnach komplexer.
Manipulieren lässt sich die Zeigerstellung über die Funktion, (die auch in kommender Fortsetzung aufgelistet wird).
Befehle:
- current() //Zeigt auf das aktuelle Element, also das Feld, auf den der Zeiger verweist.
- prev() //Setzt den Zeiger um eine Position der internen Ordnung zurück.
- next() //Analog zu prev() wird der Zeiger auf das Feld hinter dem aktuelle Element gesetzt.
- reset() //Setzt den Zeiger zurück auf das erste Element.
- end() //Der Zeiger wird auf das letzte Feld des Arrays gesetzt.
Sofern die Struktur des Arrays nicht durch Hinzufügen oder Löschen von Elementen verändern wird, zeigen reset() und
end() also immer auf dieselben Elemente. Die anderen drei Befehle rücken bei jedem Aufruf von prev() oder next()
immer eine Position in die entsprechende Richtung weiter. An den >>Rankdbezeichen<< können zwei Befehle, etwa
next() und end(), also auf desselbe Element zeigen. Ist kein voriges bzw. weiteres Element mehr vorhanden, geben
next() bzw. prev() statt ein Elements false zurück.
Fortsetzung folgt!