Ein Array in PHP ist eigentlich eine geordnete Abbildung. Eine Abbildung
ist ein Typ der Werte auf
Schlüssel abbildet. Dieser Typ ist auf mehrere Arten
optimiert, so dass Sie ihn auf verschiedene Weise benutzen können:
als reales Array, als Liste (Vektor), als Hash-Tabelle (das ist eine
praktische Anwendung einer Abbildung), als Verzeichnis, als Sammlung,
als Stapel (Stack), als Warteschlange (Queue) und möglicherweise mehr.
Da Sie ein weiteres PHP-Array als Wert benutzen können, ist es ziemlich
einfach möglich Baumstrukturen zu simulieren.
Die Erklärung dieser Strukturen sprengt den Rahmen dieses Handbuchs,
aber Sie finden zumindest ein Beispiel für jede dieser
Strukturen. Für weitergehende Informationen verweisen wir auf externe
Literatur zu diesem breit gefächerten Thema.
Ein array kann mit Hilfe des Sparchkonstrukts
array() erzeugt werden. Es benötigt eine bestimmte
Anzahl von Komma-getrennten
Schlüssel => Wert
Paaren.
Ein Schlüssel ist entweder eine nicht-negative
Zahl vom Typ integer oder ein string.
Wenn ein Schlüssel die Standard-Darstellung einer nicht-negativen
integer Zahl ist, wird es als solche interpretiert werden,
(z.B. '8' wird als 8 interpretiert
während '08' als '08'
interpretiert werden wird).
Ein Wert kann irgendetwas sein.
Falls Sie einen Schlüssel weglassen, wird das Maximum der Integer-
Indizes gennnommen und der neue Schlüssel wird dieses Maximum + 1 sein.
Falls es bis dahin keine Integer-Indizes gibt, wird der Schlüssel zu
0 (Null). Falls Sie einen Schlüssel angeben dem
schon ein Wert zugeordnet wurde, wird dieser Wert überschrieben.
array( [Schlüssel =>] Wert
, ...
)
// Schlüssel ist entweder ein string oder ein nicht-negativer integer
// Wert kann irgendetwas sein.
Sie können ein bestehendes Array durch explizites Zuweisen von Werten
verändern.
Weisen Sie dem Array Werte zu indem Sie den Schlüssel in eckigen
Klammern angeben. Sie können den Schlüssel auch weglassen. In diesem
Fall schreiben Sie einfach ein leeres Klammerpaar
("[]") hinter den Variablennamen.
$arr[Schlüssel] = Wert;
$arr[] = Wert;
// Schlüssel ist entweder ein string oder ein nicht-negativer integer
// Wert kann irgendetwas sein.
Falls $arr bis dahin nicht existiert, wird es
erzeugt. Das ist also eine alternative Syntax um ein Array zu erzeugen.
Um einen bestimmten Wert zu ändern, weisen Sie diesem einfach einen
neuen Wert zu. Wenn Sie ein Schlüssel/Wert Paar entfernen möchten,
benutzen Sie unset().
Sie sollten immer Anführungszeichen für einen assoziativen Index
eines Arrays benutzen. Zum Beispiel sollten Sie $foo['bar'] und nicht
$foo[bar] benutzen. Aber warum ist $foo[bar] falsch?
Vieleicht kennen Sie folgende Syntax aus alten Skripts:
$foo[bar] = 'Feind';
echo $foo[bar];
// usw
Es ist falsch, funktioniert aber. Warum ist es dann falsch?
Der Grund ist, dass dieser Code eine undefinierte Konstante enthält
(bar) anstatt eines Strings ('bar'- beachten Sie die
Anführungszeichen) und PHP könnte in Zukunft Konstanten definieren,
die unglücklicherweise für Ihren Code, den gleichen Namen verwenden.
Es funktioniert, weil die undefinierte Konstante in einen String mit
gleichem Namen umgewandelt wird.
Wie im Abschnitt Syntax
ausgeführt, muss zwischen den eckigen Klammern
('[' und ']') ein Ausdruck stehen.
Das heißt, dass Sie Dinge ähnlich diesen schreiben können:
echo $arr[ foo(true) ];
Das ist ein Beispiel dafür, wie Sie den Rückgabewert einer Funktion als
Array-Index verwenden können. Ebenso kennt PHP Konstanten, vielleicht
haben Sie die E_* Konstanten schon einmal gesehen.
$error_descriptions[E_ERROR] = "Ein schwerwiegender Fehler ist aufgetreten";
$error_descriptions[E_WARNING] = "PHP hat eine Warnung ausgegeben";
$error_descriptions[E_NOTICE] = "Das ist nur eine informelle Notiz";
Beachten Sie, dass E_ERROR ebenso ein gültiger
Bezeichner ist, genau wie bar im ersten Beispiel.
Das letzte Beispiel entspricht aber tatsächlich dem folgendem Code:
$error_descriptions[1] = "Ein schwerwiegender Fehler ist aufgetreten";
$error_descriptions[2] = "PHP hat eine Warnung ausgegeben";
$error_descriptions[8] = "Das ist nur eine informelle Notiz";
weil E_ERROR gleich 1 ist, usw.
Aber wie ist es dann möglich dass $foo[bar]
funktioniert? Es funktioniert, weil bar aufgrund
seiner Syntax als Konstante ausgewertet wird. In diesem Fall jedoch
existiert keine Konstane mit dem Namen bar. PHP
nimmt an, dass Sie bar wörtlich gemeint haben, wie
den String 'bar', aber vergessen haben, die
Anführungszeichen zu setzen.
Eines Tages könnte sich das PHP Team entscheiden eine weitere
Konstante oder ein Schlüsselwort hinzuzufügen und dann geraten Sie in
Schwierigkeiten. Zum Beispiel können Sie bereits die Wörter
empty und default auf diese Art
nicht benutzen, weil es speziele Schlüsselwörter sind.
Anmerkung:
Wenn Sie
error_reporting
auf E_ALL setzen, werden Sie bemerken, dass PHP
jedesmal Notices ausgibt, wenn Sie einen
index benutzen, der nicht definiert wurde.
(Fügen Sie die Zeile error_reporting(E_ALL);
in Ihr Skript ein).
Anmerkung:
Innerhalb eines string in doppelten Anführunfszeichen
gilt eine andere Syntax. Für mehr Details schauen Sie unter
Variablen-Analyse in Strings nach.
$farben = array('rot','blau','grün','gelb');
foreach ($farben as $farbe) {
echo "Gefällt Ihnen $farbe?\n";
}
/* Ausgabe:
Gefällt Ihnen rot?
Gefällt Ihnen blau?
Gefällt Ihnen grün?
Gefällt Ihnen gelb?
*/
Beachten Sie, dass es gegenwärtig nicht möglich ist die Werte eines
Arrays direkt in einer solchen Schleife zu ändern.
Eine Lösung ist folgendes:
// Füllen eines Arrays mit allen Inhalten eines Verzeichnisses
$handle = opendir('.');
while ($file = readdir($handle))
{
$files[] = $file;
}
closedir($handle);
Arrays sind geordnet. Diese Ordnung können Sie mit Hilfe verschiedener
Sortierfunktionen verändern. Für mehr Informationen schauen Sie unter
dem Abschnitt zu den Array Funktionen
nach.
Beispiel 6-9. Sortien eines Array
sort($files);
print_r($files);
Weil der Wert eines Arrays irgendetwas sein kann, kann dieser Wert
wiederum ein Array sein. Somit können Sie rekursive und multidimensionale
Arrays erzeugen.
Beispiel 6-10. Rekursive and multidimensionale Arrays