PHP lernen – Arrays

Hi,

heute geht’s um Arrays. Du hast Variablen kennen gelernt und weißt, dass man in solchen Werte speichern kann. Und dass Variablen von verschiedenen Typen sein können (Text, Zahlen, Boolean). Arrays sind sowas ähnliches – sie tun im Grunde dasselbe, es lassen sich darin aber mehr als nur ein Wert abspeichern.

Was sind Arrays?

Arrays sind sog. Datenfelder, man spricht auch von Schlüssel-Werte-Paaren. Variablen kennst du ja schon. Eine Variable  hat einen Namen und ihr wird ein Wert zugewiesen. Einem Array können hingegen viele Werte zugewiesen werden. Dabei legt man einen Wert im Array ab, auf den man über einen Schlüssel Zugriff erhält. Dieser Schlüssel ist quasi der Index innerhalb der Liste von Werten.

Testen wir das in der Praxis. Ich deklariere ein Array und gebe ihm 3 Werte, anschließend gebe ich den ersten und zweiten Wert aus:

Nein, ich hab‘ mich nicht verschrieben als ich das erste Element im Array ausgeben wollte – das muss so. Sieht komisch aus, aber in der Programmierung beginnt die Nummerierung (Index) immer bei Null und nicht bei Eins.

Analog hierzu können wir nun auch noch das letzte Element ausgeben – du ahnst schon wie wur Zugriff auf das dritte Element erhalten:

Fantastisch, ich denke das ist nicht so schwer – abgesehen davon dass es natürlich etwas wirr aussieht, wenn man vorher noch nie Programmcode gesehen hat 😉

Aber schauen wir auch drauf, dass du gleich up-to-date bist, denn für die Array-Deklaration gibt es eine alternative Schreibweise:

Warum zeig‘ ich dir das, will ich Verwirrung stiften? Nein, allerdings wirst du beim googlen über beide Schreibweisen stolpern, besser du hast sie also gleich intus. Diese Schreibweise mit den eckigen Klammern würde ich dir übrigens durchweg empfehlen, nicht nur weil es intuitiver ist (den Zugriff auf Elemente des Array erhältst du ja auch, indem du den Schlüssel in eckigen Klammern angibst) sondern auch weil sie geläufiger ist. Möglich ist das ab PHP Version 5.4, aber da solltest du mit dem aktuellen XAMPP-Paket definitiv drüber liegen (PHP 5.5.9 bzw. 5.6 und aufwärts). Falls du doch Bedenken hast, kannst du das mit folgender Code-Zeile ganz schnell herausfinden:

Numerische Indexierung

Wie du siehst, hat PHP also die Werte die zu in das Array gepackt hast, automatisch durchnummeriert – weniger zu tun für uns. Natürlich können wir aber auch selbst angeben, welcher Wert unter welchem Schlüssel gespeichert wird.

Es ist also völlig egal, unter welchem Index du deine Werte speichern willst. Entsprechend erfolgt der Zugriff nun über die von dir angegebenen Schlüssel:

Die Ausgabe ist ein bisschen ätzend: ApfelBananeMelone . Das kriegen wir schöner hin, indem wir einfach einen HTML-Zeilenumbruch hinter jede ausgegebene Zeile setzen:

Und schon sieht es hübsch aus:

Manuelle und automatische Indexierung mischen

Du hast jetzt gesehen wie PHP die Nummerierung selbst vornimmt, und wie du sie beeinflussen kannst. Bei der Deklaration können wir beide Varianten ganz einfach mischen. PHP arbeitet dabei so, dass es erneut versucht, beginnend bei Null zu nummerieren – falls wir aber den ersten Wert manuell setzen, nimmt PHP den nächstgrößeren Wert. Sehen wir uns das mal an:

Und damit wir nicht wieder so viele Zeilen zur Ausgabe verschwenden müssen, gibt es zwei einfache Befehle, um Arrays auf die schnelle auszugeben, var_dump  und print_r . Also dasselbe nochmal:

Die Ausgabe sieht folgendermaßen aus:

So schnell kann’s gehen – aber so richtig schön ist es nicht. Ich persönlich verwende zur Ausgabe immer gern den HTML pre -Tag in Verbindung mit print_r, wobei ich an die print_r Funktion noch zusätzlich den zweiten Parameter true der dafür sorgt, dass print_r nicht sofort eine Ausgabe macht – damit kann ich print_r mit echo verwenden. Machen wir’s diesmal richtig:

Und die Ausgabe ist auch sehr hübsch und übersichtlich:

Für Banane und und Birne hat PHP den Index selbst bestimmt. Die Banane an Index 13 (weil der größte vorherige 12 ist, das haben wir so festgelegt) und die Birne an 14, weil es die nächstgrößere Zahl ist.

Welche Fallstricke gibt es?

Man kann sich schonmal vertippen und zum Beispiel einen Wert aus dem Array holen, den es am angegebenen Index nicht gibt. Machen wir mal absichtlich einen Fehler:

So, und wenn du den Code jetzt ausführst, bekommst du entweder gar nix angezeigt (die Seite bleibt weiß und hat keine Ausgabe) oder du bekommst eine Fehlermeldung.

 

Falls du nur eine weiße Seite bekommst, erweitere deinen Code am Anfang um die folgenden zwei Zeilen:

Vermutlich bekommst du also spätestens jetzt den Fehler ausgegeben:

Perfekt, ein Fehler, was machen wir jetzt damit? Nix, aber du hast eine neue Fehlermeldung kennengelernt. „Undefined offset“ bedeutet übersetzt in etwa soviel wie dass der Ableger nicht definiert ist. Der Wert der versucht wurde auszugeben, ist also nicht bei Index 7 abgelegt. Den Fehler wirst du noch öfter sehen.

Kann ich Werte auch nachträglich zum Array hinzufügen?

Sicher, nix leichter als das. Und zwar einfach, indem wir an den Variablennamen des Array ein Paar eckiger Klammern hängen und dann den Wert zuweisen. Außerdem siehst du, wie man ein leeres Array anlegen kann (jupp, das geht natürlich auch):

Die Ausgabe hierzu ist dementsprechend:

Und natürlich lassen sich vorhandene Werte in einem Array auch genausogut Überschreiben. Check das:

Der Wert an Index 2 (Banane) wurde also ersetzt mit Erdbeere, daher auch die Ausgabe:

Assoziativer Index – Namen statt Zahlen

Wie schon gesagt, ein Element, also ein Wert im Array erhält automatisch einen Index, wenn man selber keinen angegeben hat. Über diesen Index  kann ein Array-Element angesprochen werden. Es gibt 2 Arten, wie Werte in Arrays indexiert werden können:

  • Numerischer Index
    Wenn man (wir wir es im obigen Code-Beispiel gemacht haben) die Werte einfach an ein Array übergibt, nummeriert PHP den Index von 0 (Null) beginnend einfach durch. Das erste Element („Wert1“) ist an Index #0 des Arrays zu finden, „Wert2“ ist an Index #1 und so weiter.
  • Assoziativer Index
    So viele seltsame Begriffe auf einmal! Aber wir schaffen das schon, keine Panik. Assoziativ heißt nur, dass man Elemente eines Arrays anstatt durch den numerischen Index über einen Namen anspricht. Das ist wesentlich komfortabler wenn man im Vornherein weiß, welche Werte das Array enthält.

Funktionieren tut es genauso, nur dass man anstatt Zahlen eben Text für den Index angibt (somit also in Anführungszeichen). Und so läuft es:

Das Beispiel erzeugt folgende Ausgabe:

Ist doch deutlich komfortabler und auch intuitiver, als sich einen numerischen Index zu merken 🙂

Kann ich Elemente in einem Array numerisch UND assoziativ ablegen?

Auch das geht, wie folgendes Beispiel zeigt:

Das Beispiel erzeugt folgende Ausgabe:

Wir haben dem Array zuerst über einen assoziativen Index „eins“ den Wert „Wert 1“ zugewiesen, dann über einen numerischen Index den Wert „Wert 2“ und zum Schluss wieder PHP überlassen, an welchem Index er den dritten Wert „Wert 3“ ablegt – in dem Fall an Index #9, weil ja #8 der höchste war.

Ein Array kann also numerisch oder assoziativ oder von PHP automatisch indexiert werden – und das geht wenn es mal sein muss auch alles auf einmal.

Kann der Wert eines Arrays selbst ein Array sein?

Jawohl, das ist möglich. Man spricht dabei von „verschachtelten“ Arrays. Ein Array kann also ein weiteres Array als Wert haben. Geschrieben wird es genauso. Hier ein Code zur Verdeutlichung:

Das Beispiel erzeugt folgende Ausgabe:

Array-Funktionen

PHP stellt einige Funktionen speziell für Arrays zur Verfügung. Ich zeige dir im Folgenden einige davon.

Werte aus einem Array löschen

Aus einem Array können mit der Funktion unset  Werte gelöscht werden. Schau her:

Die Ausgabe hierzu lautet dementsprechend:

Etwas hieran fällt ins Auge – das Array wird nicht neu indiziert. Der Wert wird einfach rausgelöscht. Wenn man an unset ein Array ohne Angabe des Index übergibt, ist anschließend das Array weg. Analog hierzu kann man an die Funktion unset anstatt eines Array-Wertes auch eine Variable übergeben – diese würde es anschließend einfach nicht mehr geben. Lass mich dir auch das kurz zeigen:

Die Ausgabe hierzu? Schwer zu sagen, entweder bei dir wird gar nichts angezeigt (weiße Seite) oder du erhältst folgende Fehlermeldungen:

Die Beschreibung des Fehlers ist recht eindeutig: „Undefined Variable“. Es wird also versucht, eine Variable (in dem Fall ja zuerst ein Array und danach eine Variable, PHP macht da von der Fehlermeldung her aber keinen Unterschied) auszugeben, die nicht deklariert ist. Warum nicht? Weil wir sie mit unset gelöscht haben.

Anzahl der Array-Elemente anzeigen

Hierfür gibt’s eine Funktion count . Man übergibt ihr das Array und sie spuckt aus, wieviele Werte es enthält:

Die Ausgabe ist

Werte im Array zufällig anordnen

Die Funktion shuffle  tut genau das:

Folgende Ausgabe wird erzeugt (die natürlich jedes mal anders ist):

Implode und Explode

Klingt erstmal seltsam, aber diese beiden Funktionen wirst du lieben – und später sicher auch an einigen Stellen verwenden.

implode

Mit implode kannst du alle Elemente eines Arrays zu einem String zusammenfügen. Die Funktion erwartet zwei Werte die zu übergeben sind, 1) einen Verkettungs-String und 2) das Array mit den Werten. Schau selbst:

Du siehst folgende Ausgabe:

Alle Elemente des Arrays wurden mit „, “ zusammengefügt. Du kannst das natürlich dann auch einer Variable zuweisen, einfach mit $Text = implode(", ", $Namen); .

explode

Explode tut genau das Gegenteil – es splittet einen String anhand eines bestimmten gewünschten Zeichens in Array-Elemente. Check das:

Wir splitten den Text auf bei allen Leerzeichen, anschließend geben wir das Array mit print_r aus und sehen:

Die beiden Funktionen werden dir noch öfter nützlich sein.

Links & Infos

FAQ

Assoziativer Index in einfachen oder doppelten Anführungszeichen?
Ah, da hat jemand aufgepasst. Ja, ich verwende oben im Code mal einfache '  und mal doppelte "  Anführungszeichen. Welche du nimmst ist egal, das bleibt dir überlassen.

Indexiertes Array? Indiziertes Array? Assoziatives Array? Was denn nun??
Einen Index hat jedes Array – dies können Schlüssel vom Typ Integer (=numerisch) oder vom Typ String (=assoziativ) sein. Aber beim numerisch indexierten Array spricht man auch vom indizierten Array (auch wenn das eigentlich nicht ganz der korrekte Ausdruck dafür ist, indexiert ist eher richtig). In anderen Tutorials hast du das vielleicht wieder anders gelesen. Lass dich nicht verrückt machen, wichtig ist, dass der Zugriff numerisch oder assoziativ erfolgt. Fertig.

Fazit

„Deklaration von numerischen oder assoziativ indizierten Arrays“ … klingt ja richtig schlau wenn das jemand sagt. Und du weißt jetzt sogar, was damit gemeint ist – wenn das nich cool ist. Im nächsten Teil wird es richtig spannend, da kommt Interaktion in’s Spiel. Wir werden mit HTML-Formularen arbeiten, sodass man als Person vor dem Browser auch endlich mal was auf der Seite machen kann. Wir werden lernen, mit GET- und POST-Requests zu arbeiten (was viel schlimmer klingt als es ist) und Benutzereingaben zu verarbeiten. Außerdem werden Schleifen sich als äußerst praktisch erweisen, jetzt wo du Arrays kennengelernt hast.

Gruß
Marius

2 Kommentare

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich stimme zu.