ArraysEin Array in PHP ist tatsächlich eine geordnete Map. Eine Map ist ein Typ, der Werte zu Schlüsseln zuordnet. Dieser Typ ist für einige verschiedene Nutzungsarten optimiert. Er kann als ein Array verwendet werden, als Liste (Vektor), Hash Table (eine Implementierung einer Map), Dictionary, Collection, Stack, Queue und wahrscheinlich noch als vieles anderes. Da ein Wert eines Arrays ein weiteres Array sein kann, sind auch Bäume und mehrdimensionale Arrays möglich. Die Erläuterung dieser Datenstrukturen liegt nicht im Rahmen dieses Handbuches, aber wenigstens ein Beispiel für jede ist hier angegeben. Um weitere Informationen zu erhalten wird auf die immense Literatur zu diesem weiten Feld verwiesen. SyntaxSpezifizierung mittels arrayEin Array kann durch das Sprachkonstrukt array erzeugt werden. Dies nimmt eine beliebige Anzahl kommaseparierter Schlüssel => Wert- Paare als Parameter entgegen.
array(
Schlüssel => Wert,
Schlüssel2 => Wert2,
Schlüssel3 => Wert3,
...
)
Das Komma nach dem letzten Array-Element ist optional und kann weggelassen werden. Dies wird üblicherweise in einzeiligen Arrays getan, d.h. array(1, 2) wird der Schreibweise array(1, 2, ) vorgezogen. Andererseits wird bei mehrzeiligen Arrays das Komma am Ende üblicherweise genutzt, da dies ein einfaches Hinzufügen weiterer Elemente am Ende erlaubt. Seit PHP 5.4 kann auch eine kurze Array-Syntax verwendet werden, welche array() durch [] ersetzt. Beispiel #1 Ein einfaches Array
<?phpDer Schlüssel kann entweder ein Integer oder ein String sein. Der Wert kann beliebige Datentypen annehmen. Zusätzlich werden die folgenden Typkonvertierungen auf den Schlüssel angewendet:
Wenn mehrere Elemente in einer Array-Deklaration den gleichen Schlüssel verwenden, dann wird nur der letzte verwendet und alle weiteren überschrieben. Beispiel #2 Beispiel für Typenumwandlung und Überschreibung
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(1) {
[1]=>
string(1) "d"
}
Da alle Schlüssel im obigen Beispiel zu 1 umgewandelt werden, wird der Wert dieses Elements durch jeden angegebenen Wert überschrieben und nur der letzte zugewiesene Wert "d" bleibt übrig. Arrays können in PHP gleichzeitig Schlüssel der Typen Integer und String enthalten, da PHP nicht zwischen indizierten und assoziativen Arrays unterscheidet. Beispiel #3 Gemischte Integer und String Schlüssel
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(4) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
[100]=>
int(-100)
[-100]=>
int(100)
}
Die Angabe des Schlüssel ist optional.Ist keiner angegeben, so wird PHP den bisher größten angegebenen Integer Schlüssel erhöhen und das Ergebnis als Schlüssel verwenden. Beispiel #4 Indizierte Arrays ohne Schlüssel
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hello"
[3]=>
string(5) "world"
}
Es ist auch möglich den Schlüssel nur bei einigen Elementen anzugeben und bei anderen auszulassen: Beispiel #5 Schlüssel nicht bei allen Elementen
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
Wie Sie sehen können, wurde dem letzten Wert "d" der Schlüssel 7 zugewiesen. Dies erfolgte, da der größte vorherige ganzzahlige Schlüssel 6 war. Zugriff auf Elemente mit eckigen KlammernAuf Elemente eines Arrays kann durch Verwendung der Syntax array[Schlüssel] zugegriffen werden. Beispiel #6 Zugriff auf Array-Elemente
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: string(3) "bar" int(24) string(3) "foo"
Seit PHP 5.4 ist es möglich ein Array aus dem Rückgabewert eines Funktion- oder Methodenaufrufs direkt zu dereferenzieren. Vorher war dies nur über temporäre Variablen möglich. Seit PHP 5.5 ist es möglich ein Array-Literal zu dereferenzieren. Beispiel #7 Array-Dereferenzierung
<?php
Anlegen/Ändern mit eckigen KlammernEin bestehendes Array kann verändert werden, indem man explizit Werte darin setzt. Dies wird getan, indem man Werte dem Array zuweist, und dabei den Schlüssel in eckigen Klammern angibt. Der Schlüssel kann dabei weggelassen werden, woraus ein leeres Klammernpaar resultiert ([]). $arr[Schlüssel] = Wert; $arr[] = Wert; // Schlüssel kann ein Integer oder String sein // Wert kann einen beliebigen Typen haben Falls $arr noch nicht existiert, wird es erzeugt; dies ist also eine alternative Methode, um ein Array zu erzeugen. Dieses Vorgehen wird jedoch nicht empfohlen, da falls $arr bereits einen Wert enthält (z.B. ein String aus einer Requestvariablen), bleibt dieser Wert bestehen und [] kann tatsächlich für den String-Zugriffs-Operator stehen. Es ist immer besser eine Variable durch direkte Zuweisung zu initialisieren.
Um einen bestimmten Wert zu ändern, kann man einen Wert zum Element anhand dessen Schlüssel zuweisen. Um ein Schlüssel-Wert-Paar zu entfernen, kann man die Funktion unset darauf anwenden.
<?php
Nützliche FunktionenEs gibt einige nützliche Funktionen für die Arbeit mit Arrays, die im Abschnitt Array-Funktionen nachgeschlagen werden können.
Die Kontrollstruktur foreach existiert speziell für Arrays. Sie bietet eine einfache Möglichkeit, ein Array zu durchlaufen. Do's und Dont's für ArraysWieso ist $foo[bar] falsch?Verwenden Sie immer Anführungszeichen um ein Arrayindex-Zeichenkettenliteral. Beispielsweise ist $foo['bar'] richtig, $foo[bar] hingegen nicht. Aber wieso? Es ist üblich die folgende Schreibweise in alten Skripten zu finden:
<?php
Dies ist falsch, funktioniert aber. Der Grund dafür ist, dass dieser Code
eine undefinierte Konstante (bar) anstatt eines String
verwendet ('bar' - beachten Sie die Anführungszeichen).
Dies funktioniert, da PHP automatisch
einen nackten String (ein String ohne
Anführungszeichen welcher nicht einem bekannten Symbol entspricht) in einen
String umwandelt, welcher den nackten String
enthält. Beispielsweise wird, wenn keine Konstante namens
Weitere Beispiele zur Erläuterung dieses Verhaltens:
<?php
Wenn error_reporting so eingestellt
wird, dass Fehler der Stufe Wie im Abschnitt zur Syntax gezeigt, muss der Inhalt der eckigen Klammern '[' und ']') ein Ausdruck sein. Das bedeutet dass folgendes funktioniert:
<?phpDieses Beispiel zeigt, wie der Rückgabewert einer Funktion als Arrayindex verwendet wird. PHP kann auch Konstanten auflösen:
<?php
Beachten Sie, dass
<?php
da Wieso ist es also schlecht?Irgendwann in der Zukunft könnte das PHP-Team eine weitere Konstante oder ein Schlüsselwort hinzufügen oder eine Kostante in anderem Code könnte Einfluss nehmen. Es ist beispielsweise bereits falsch die Wörter empty oder default so zu schreiben, da dies reservierte Schlüsselwörter sind.
Konvertierung zu ArrayFür jeden der Typen Integer, Float, String, Boolean und Resource führt eine Konvertierung eines Wertes in ein Array zu einem Array mit einem einzigen Wert mit dem Index Null und dem Wert des Skalaren, der konvertiert wurde. Anders ausgedrückt ist (array)$scalarValue exakt identisch mit array($scalarValue). Wenn ein Object in ein Array konvertiert wird, so ist das Ergebnis ein Array dessen Werte die Eigenschaften des Objects sind. Die Schlüssel sind die Namen der Eigenschaften des Objektes mit einigen Ausnahmen: Eigenschaften mit Ganzzahl-Namen sind nicht zugreifbar, privaten Variablen wird der Name der Klasse vorangestellt und protected Variablen wird dem Variablenamen ein '*' vorangestellt. Diese vorangestellten Werte haben Null-Bytes auf beiden Seiten. Dies kann zu unerwartetem Verhalten führen:
<?phpIm obigen Beispiel scheint es zwei Schlüssel namens 'AA' zu geben, obwohl einer davon eigentlich '\0A\0A' ist.
Die Konvertierung von VergleicheEs ist möglich Arrays mit der Funktion array_diff und mit Array-Operatoren zu vergleichen. BeispieleDer Array-Typ in PHP ist sehr vielseitig. Hier sind einige Beispiele:
<?phpBeispiel #8 Verwendung von array()
<?phpBeispiel #9 Collection
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: Mögen sie rot? Mögen sie blau? Mögen sie grün? Mögen sie gelb? Die Veränderung der Werte eines Array ist mit der Übergabe als Referenz direkt möglich. Beispiel #10 Elemente in der Schleife verändern
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[0] => ROT
[1] => BLAU
[2] => GRÜN
[3] => GELB
)
Dieses Beispiel erzeugt ein Array mit erstem Schlüssel 1. Beispiel #11 1-basierte Indizes
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array
(
[1] => 'Januar'
[2] => 'Februar'
[3] => 'März'
)
Beispiel #12 Ein Array befüllen
<?phpArrays sind geordnet. Die Reihenfolge kann durch verschiedene Sortierfunktionen verändert werden. Siehe Array-Funktionen für mehr Informationen. Die Funktion count kann verwendet werden, um die Anzahl der Elemente eines Arrays zu ermitteln. Beispiel #13 Ein Array sortieren
<?phpDa die Werte eines Array beliebig sein können, können diese auch andere Arrays sein. Dies ermöglicht die Erzeugung von rekursiven und mehrdimensionalen Arrays. Beispiel #14 Rekursive und mehrdimensionale Arrays
<?phpZuweisung von Arrays involviert immer eine Kopie der Werte. Verwenden Sie den Referenz-Operator um eine Kopie einer Referenz auf ein Array zu erzeugen.
<?php |