12.10.18 7472 Views 5

credit: fotomek

PHP Tutorial #8

Arrays in PHP erstellen und auslesen

Arrays, ermöglichen das Speichern von logisch zusammengehörenden Daten. In diesem Kapitel lernen Sie, Arrays zu erstellen, dessen Elemente auszulesen und zu verändern.

Falconbyte unterstüzen

Betrieb und Pflege von Falconbyte brauchen viel Zeit und Geld. Um dir auch weiterhin hochwertigen Content anbieten zu können, kannst du uns sehr gerne mit einem kleinen "Trinkgeld" unterstützen.

Schnelles Code-Beispiel

//Standard-Array von Ganzzahlen erstellen
$meinArray = array(1,2,3,4);

//Alle Elemente von $meinArray ausgeben:
echo $meinArray[0];
echo $meinArray[1];
echo $meinArray[2];
echo $meinArray[3];

    Inhaltsverzeichnis

  1. Wozu Arrays?
  2. Numerisch indizierte Arrays
  3. Assoziative Arrays
  4. Multidimensionale Arrays
  5. Übungen

Wozu Arrays?

Arrays, auch "Felder" genannt, ermöglichen das Speichern von „logisch zusammengehörende Daten“. Was soll das heißen?

Damit ist gemeint, dass wir Arrays immer dann verwenden sollten, wenn wir mit Daten arbeiten, die einen natürlichen Bezug zueinander haben. So gehören etwa die 6 Lottozahlen oder auch eine Liste mit Preisen eng zusammen und wir sollten diese Werte in einem Array für Lottozahlen bzw. einem Array für Preise speichern.

Wie wir dann auf diese Werte zugreifen, hängt vom Typ des Arrays ab, den wir festlegen. PHP untersützt zwei verschiedene Array-Typen. Lassen Sie sich bloß nicht von den Bezeichnung für diese beiden Array-Typen abschrecken. Sie sind in Wirklichkeit ganz unkompliziert:

  • Numerisch indiziertes Array: Jedes einzelne Element in einem solchen Array erhält eine eindeutige Nummer (fortlaufend von 0 bis n). Über diese Nummern, sog. Indices, können wir die einzelnen Elemente eines Arrays gezielt ansteuern.
  • Assoziatives Array: Hier werden die einzelnen Elemente eines Arrays nicht mit einer fortlaufenden Nummer, sondern mit einer eindeutigen Bezeichnung angesteuert. Dies funktioniert nach dem Prinzip der Hash-Tabelle mit key (Schlüssel) und value (Wert). Wir klären weiter unten, was das bedeutet.

Wir werden uns nun nacheinander beide Array-Typen genau ansehen.

Numerisch indizierte Arrays

Array mit Elementen erstellen

Greifen wir das Beispiel mit den Lottozahlen einmal konkret auf und erstellen ein Array mit 6 Integer-Werten:

$lottozahlen = array(2,8,10,22,29,40);

Die einzelnen Werte, die das Array speichern soll, werden mittels der Funktion array() übergeben und stehen dabei als Parameter kommasepariert in Klammern. Das so erstellte Array speichern wir dann in der Variablen $lottozahlen.

Was bedeutet numerisch-indiziert?

Unser Lottozahlen-Array $lottozahlen ist ein "numerisch indiziertes" Array ist. Das ist die Standard-Version für Arrays. "Numerisch indiziert" bedeutet, dass jedes Element in einem Array eine ganz bestimmte Nummer in eben diesem Array zugewiesen bekommt. Diese Nummer nennen wir Index.

Der Index ist so etwas wie die eindeutige „Adresse“ eines Elements in seinem Array. Wir können somit einzelne Elemente eines Arrays gezielt abrufen. Die Index-Nummerierung erfolgt dabei immer aufsteigend und zwar beginnend bei dem Index 0. Somit hat das erste Element eines Arrays immer den Index 0 und das letzte den Index [Array-Größe n] MINUS 1.

Ein Array ist somit nichts anderes als ein Speicherblock, der verschiedene Elemente “in sich“ positionieren kann. Jede Position im Array ist nur einmal zu vergeben. Das Schaubild verdeutlich diesen Aspekt:

PHP Array Infografik

Auf unser Lottozahlen-Array übertragen, können wir nun folgende Feststellungen machen:

  • Mit dem Code $lottozahlen = array(2,8,10,22,29,40); haben wir ein Array mit der Länge 6 erstellt.
  • Alle 6 Index-Positionen sind besetzt mit Integer-Elementen (ganze Zahlen). Freilich könnten auch Elemente anderen Datentyps gespeichert werden.
  • Das erste Elemente (nämlich 2) hat die Index-Position 0. Das letzte Element (40) hat den Index 5 (wegen n-1, wobei n für die Array-Größe steht).
  • Der Code $lottozahlen[6]; ist ungültig und erzeugt den Fehler Undefined offset. Ist doch klar: Ein Element mit dem Index 6 (und größer) exisitiert nicht!

Elemente eines Arrays auslesen

Wie lesen wir einzelne Elemente eines Arrays aus oder - mit anderen Worten - wie picken wir ein Element aus dem Array heraus?

Um einzelne Elemente eines Arrays auszulesen, schreiben wir den entsprechenden Index in eckigen Klammern hinter den Arraynamen. Die folgende Tabelle gibt uns eine Übersicht über die Index-Positionen und Elemente für das Array $lottozahlen:

Index Zugriff Element
0 $lottozahlen[0] 2
1 $lottozahlen[1] 8
2 $lottozahlen[2] 10
3 $lottozahlen[3] 22
4 $lottozahlen[4] 29
5 $lottozahlen[5] 40

Im praktischen Einsatz sieht das so aus:

echo $lottozahlen[0];
echo $lottozahlen[1];
echo $lottozahlen[5];

Wir geben hier drei Lottozahlen am Bildschirm aus, indem wir zunächst die Variable nennen, die das Array trägt. Direkt daneben schreiben wir in eckigen Klammern die Index-Nummer des Elements, das wir haben wollen. Im obigen Beispiel erhalten wir so die Lottozahlen 2 8 und 40 (nämlich das erste, zweite und letzte Element.

Elemente überschreiben

Da wir wissen, wie wir Elemente eines Arrays rauspicken, können wir sie auch mit neuen Elementen überschreiben bzw. die Index-Position neu besetzen. Lassen Sie uns ein wenig an den Lottozahlen schrauben und die dritte Zahl, das ist die auf Index-Position 2, verändern, sodass der alte Wert 10 durch einen neuen Wert, sagen wir einfach mal... 33 ersetzt wird:

echo "Lottozahl auf Index-Position 2: 
"; echo $lottozahlen[2] . "
"; $lottozahlen[2] = 33; //Neuzuweisung Indexposition 2 echo "Neue Zahl auf Index-Position 2:
"; echo $lottozahlen[2];

Lottozahl auf Index-Position 2:
10
Neue Zahl auf Index-Position 2:
33

Elemente hinzufügen

Wir können in PHP einem Array weitere Elemente hinzufügen, indem wir hinter der letzten Index-Position einfach einen neuen Index mit neuem Element platzieren.

Die Syntax ist nach folgendem Muster anzuwenden:
$array[NeueLetzteIndexPosition] = WERT;

Für unser Lottozahlen-Beispiel sieht das so aussehen:
$lottozahlen[6] = 9;
Das Array hätte nun 7 Indices.

Assoziative Arrays

Der wesentliche Unterschied zwischen einem numerisch-indizierten Array und einem assoziativen Array liegt darin, wie wir die einzelnen Array-Elemente ansteuern.

Während die Elemente eines numerisch-indizierten Arrays über eine fortlaufende Index-Numerierung angeordnet sind, werden die Elemente (values) eines assoziativen Arrays über keys (=Schlüsselbegriffe) zugeordnet.

Dieses Prinzip wird auch hash-table genannt und ermöglicht es uns, den einzelnen Array-Elementen eindeutigen Begriffe zuzuordnen.

Erstellen wir testweise ein assoziatives Array zu einer Preisliste für diverse Produkte:

//Assoziatives Array erstellen
$preise = array("Kirschen" => 2.99,
                "Erdbeeren"=>3.49,
                "Trauben"=>1.50,
                "Orangen" => 4.19);

Wir müssen bei einem assoziativem Array jedem Schlüssel (key) mit dem Operator => einen Wert (value) direkt zuweisen.

Dies geschieht wie schon beim numerisch-indizierten Array mithilfe der Funktion array(), nur dass wir diesmal in die runden Klammern nacheinander key (Schlüssel) und dazugehörigen Value (Wert) schreiben.

Jeder key muss als String zwischen doppelten Anführungszeichen " " stehen. Zwischen den einzelnen key-value-Paaren steht zur Trennung immer ein Komma.

Elemente auslesen

rinnern Sie sich? Bei einem numerisch-indizierten Array haben wir zum Auslesen eines Elements die Index-Nummer im Array benötigt. In einem assoziativen Array benötigen wir nun den Schlüssel/ key. Das Prinzip ist bei beiden Array-Typen gleich:

// Wieviel Euro kosten Kirschen?
echo $preise["Kirschen"];

// Wieviel Euro kosten Erdbeeren?
echo $preise["Erdbeeren"];

// und so weiter...

Werte ändern und Elemente hinzufügen

Angenommen der Preis für Kirschen ändern sich von 2.99 auf 3.10. Dann schreiben wir:

$preise["Kirschen"] = 3.10;

Und wenn ein neues Obst (also Array-Element) hinzugefügt werden soll, ist das ähnlich einfach:

$preise["AnanasDeluxe"] = 6.99;

Wir haben nun durch das Hinzufügen der AnanasDeluxe insgesamt 5 Elemente in unserem Array, d.h. 5 key-value-Paare. Bei einem Wert von 6.99 hoffen wir doch sehr, dass das Teil auch schmeckt! ;)

key-value-Tabelle des assoziativen Arrays

Zur einfacheren ÜBersicht auch hier eine entsprechende Tabelle für das assoziative Array:

Name des Elements key value
$preise["Kirschen"] "Kirschen" 2.99
$preise["Erdbeeren"] "Erdbeeren" 3.49
$preise["Trauben"] "Trauben" 1.50
$preise["Orangen"] "Orangen" 4.19
$preise["AnanasDeluxe"] "AnanasDeluxe" 6.99

Multidimensionale Arrays

Bisher haben wir nur mit eindimensionale Arrays gearbeitet. Für komplexere Datenstrukturen genügt das aber oftmals nicht. Wir werden es dann mit multidimensionalen Arrays zu tun bekommen.

  • Ein multidimensionales Array ein Array, dessen Elemente wiederum Arrays sind.

Da vor allem zweidimensionale Arrays recht häufig vorkommen, schauen wir uns diese jetzt mal genauer an.

Stellen Sie sich ein zweidimensionales Array als eine Art Gitter mit Koordinaten vor:

PHP Infografik mehrdimensionale Arrays

Wie man sieht, besteht ein zweidimensionales Array aus einer Reihe von untergeordneten Einzelarrays ("Subarrays"). Diese wiederum halten jeweils einzelne Elemente.

Erstellen wir nun mit PHP ein zweidimensionales Array für int-Werte:

//Zweidimensionales Array erstellen:

$array2D = array(array(2,4,1,34),
		   	 	  array(9,10,14)
                );

Wir haben nun zwei Subarrays innerhalb des übergeordneten Hauptarrays namens $array2D.

Das erste Subarray hat die int-Wert 2, 4, 1, 34 und das zweite Subarray hat die int-Werte 9, 10, 14

Subarrays haben keine Namen, wir können sie aber einfach über $array2D[0] bzw. $array2D[1] ansteuern.

Um die einzelnen Elemente der jeweiligen Subarrays auszuwählen, setzen wir hinter den Namen der Array-Variable $array2D zwei eckige Klammern. in diese tragen wir ein:

  • erste eckige Klammer: Auswahl des Subarrays über dessen Index-Nummer.
  • zweite eckige Klammer: Index-Wert des gewünschten Elements des in der ersten Klammer gewählten Subarrays.

In einem konkreten Beispiel sieht das dann so aus:

echo "Elemente des 2. Subarrays: <br>";
echo $array2D[0][0] . "<br>";
echo $array2D[0][1] . "<br>";
echo $array2D[0][2] . "<br>";
echo $array2D[0][3] . "<br>";

echo "Elemente des 2. Subarrays: <br>";
echo $array2D[1][0] . "<br>";
echo $array2D[1][1] . "<br>";
echo $array2D[1][2] . "<br>";

Wir erhalten am Bildschirm angezeigt:

Elemente des 1. Subarrays:
2
4
1
34
Elemente des 2. Subarrays:
9
10
14

Übungen

einfach

Wo liegt der Fehler in folgendem Code?

$einArray = array(1,2,3,4,5,6,7);
$gibElement = $einArray[7];
Lösung ein-/ausblenden

mittel

Erstellen Sie ein assoziatives Array, das zu jedem Namen einer Person auch einen Wohnort (Stadt) bereitstellt. Denken Sie sich Namen und dazugehörigen Wohnort selbst aus. Insgesamt soll das Array die Größe 5 haben.

Lösung ein-/ausblenden

schwer

Kennen Sie Stromberg? Bernd Stromberg ist ein (fiktiver) Abteilungsleiter bzw. nach seiner Degradierung auch Mitarbeiter bei einer fiktiven Versicherungsgesellschaft. In seiner Abteilung geht es stets drunter und drüber. Nun soll die Arbeit der Mitarbeiter der Abteilung bewertet werden. Jeder Mitarbeiter erhält eine Punktezahl von 0 bis 100. Um das Chaos in der Abteilung perfekt zu machen, sollen diese Punkte aber ganz zufällig verteilt werden!

Los geht’s: Definieren Sie ein assoziatives Array mit dem Namen $abteilung, das 10 Mitarbeiter (siehe Tabelle unten) und zu jedem Mitarbeiter eine dazugehörende Punktzahl speichert. Die Punkte sollen, wie gesagt, zufällig verteilt werden. Nutzen Sie hierfür einen Zufallsgenerator!

Geben Sie in einem zweiten Schritt die Namen der Mitarbeiter und ihre erhaltene Punktzahl in einer zwei-spaltigen HTML-Tabelle am Bildschirm aus. Benutzen Sie hierfür eine foreach-Schleife!

Das Ergebnis sollte am Ende in etwa so aussehen.

NameGehalt
Herr Becker 24
Stromberg 14
Tanja 66
Sabbel 34
Ernie 87
Ulf 99
Erika 94
Jennifer 46
Turculu 69
Lars 24
Frau Berkel 1

Lösung ein-/ausblenden

Java lernen

text text

PHP Lernen

zur PHP

JavaScript lernen

move nove move

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen