Spezifizierung mittels array()
Ein 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
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// seit PHP 5.4
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
Der 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:
-
Strings die einen gültigen Integer enthalten werden
zum entsprechenden Integer umgewandelt. Beispielsweise wird der
Schlüssel "8" tatsächlich unter 8
gespeichert. Andererseits wird "08" nicht umgewandelt, da
dies kein gültiger Ganzzahlwert ist.
-
Floats werden ebenfalls zu Integer umgewandelt, was ein
Abschneiden des Dezimalbruches zur Folge hat. Beispielsweise wird der Schlüssel
8.7 als 8 gespeichert.
-
Bools werden ebenfalls zu Integer umgewandelt, d.h.
der Schlüssel true wird unter 1
gespeichert und der Schlüssel false unter 0.
-
Null wird zu einem leeren String umgewandelt, d.h. der Schlüssel
null wird tatsächlich unter "" gespeichert.
-
Werte vom typ Array oder Object können nicht als Schlüssel
verwendet werden. Ein Versuch dies zu tun wird die Warnung
Illegal offset type zur Folge haben.
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
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
Das 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
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
?>
Das 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
<?php
$array = array("foo", "bar", "hello", "world");
var_dump($array);
?>
Das 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:
Beispiel #5 Schlüssel nicht bei allen Elementen
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
Das 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 die 6 war.
Zugriff auf Elemente mit eckigen Klammern
Auf Elemente eines Arrays kann durch Verwendung der Syntax
array[Schlüssel] zugegriffen werden.
Beispiel #6 Zugriff auf Array-Elemente
<?php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>
Das oben gezeigte Beispiel erzeugt folgende
Ausgabe:
string(3) "bar"
int(24)
string(3) "foo"
Hinweis:
Sowohl eckige als auch geschweifte Klammern können verwendet werden, um auf
die Elemente eines Arrays zuzugreifen (z.B. werden im obigen Beispiel
$array[43] und array{42} auf das gleiche
Element zugreifen).
Seit PHP 5.4 ist es möglich ein Array aus dem Rückgabewert eines Funktion
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
function getArray() {
return array(1, 2, 3);
}
// seit PHP 5.4
$secondElement = getArray()[1];
// vorher
$tmp = getArray();
$secondElement = $tmp[1];
// oder
list(, $secondElement) = getArray();
?>
Hinweis:
Der Versuch auf einen nicht definierten Arrayschlüssel zuzugreifen
ist gleichwertig zum Zugriff jeder anderen undefinierten Variable:
Ein Fehler der Stufe E_NOTICE wird ausgegeben
und das Ergebnis ist NULL.
Anlegen/Ändern mit eckigen Klammern
Ein 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.
Hinweis:
Wie vorher bereits erwähnt wird das Maximum der bestehenden Schlüssel vom
Typ Integer verwendet, wenn kein Schlüssel angegeben ist, und der
neue Schlüssel wird das Maximum plus 1 sein (aber mindestens 0). Wenn noch kein
Integer-Schlüssel existiert wird der schlüssel 0
(Null) verwendet.
Beachten Sie, dass der Maximalwert der Integer-Schlüssel dafür
aktuell nicht im Array existieren muss.
Er muss nur zu einem vorherigen Zeitpunkt im Array
existiert haben seitdem das Array zuletzt neu
indiziert wurde. Das folgende Beispiel erläutert dies: