Websiteentwicklung: PHP: Praktische Einführung: Arrays

Aus Wikibooks

Du wartest wahrscheinlich schon gespannt darauf, Formulare auszuwerten und endlich Interaktivität zu haben. Bevor du das tun kannst, fehlt noch das Verständnis eines weiteren Konstrukts: Den Arrays.

Was ist ein Array?[Bearbeiten]

Ein Array ist ein weiterer Typ in PHP. Viele Anfänger tun sich schwer mit Arrays, insbesondere wenn sie in mehrere Dimensionen gehen. Deswegen versucht dieses Kapitel, dir Arrays so anschaulich wie möglich näherzubringen.

Hinweis

Vielleicht kennst du Arrays bereits aus anderen Programmiersprachen (z.B. C). In PHP ist der Begriff von Arrays viel weiter gefasst und vereint das Konzept von numerischen Arrays, Maps, Dictionaries, Listen und anderen.

Arrays sind wie Regalfächer, die man modular aneinander hängen kann. Die Fächer ("Elemente") haben eine Beschriftung (Der Schlüssel, bzw. "Key") und einen Inhalt (Wert, bzw. "Value"). Außerdem sind sie in einer bestimmten Reihenfolge angeordnet, die nicht unbedingt mit ihrer Beschriftung übereinstimmen müssen. Innerhalb von Regalfächern können sich ebenfalls Regale befinden.

Arrays mit array() definieren[Bearbeiten]

Die erste Möglichkeit, ein Array zu definieren, ist das Sprachkonstrukt array:

<?php

$leeres_array = array();

$himmelsrichtungen = array('Norden', 'Osten', 'Süden', 'Westen');

?>

$leeres_array ist, wie der Name schon sagt, ein leeres Array mit keinem Element. Du kannst dir den Inhalt eines Arrays mit var_dump oder mit print_r anzeigen lassen. Das leere Array wird mit

<?php

echo '<pre>';
print_r($leeres_array);
echo '</pre>';

folgende Ausgabe erzeugen:

Array
(
)

Das Array $himmelsrichtungen sieht mit print_r so aus:

Array
(
    [0] => Norden
    [1] => Osten
    [2] => Süden
    [3] => Westen
)

Die Werte in den Klammern sind die Schlüssel, bzw. Fächerbeschriftungen, um im Bild zu bleiben. In der Programmierung bekommt das erste Element immer den Schlüssel 0, nicht 1.

Du kannst mit array() auch direkt die Schlüssel festlegen:

<?php

$kunde = array('nachname' => 'Müller', 'alter' => 42, 'email' => 'mail@example.com');

?>

führt zu folgender Struktur:

Array
(
    [nachname] => Müller
    [alter] => 42
    [email] => mail@example.com
)

Das geht sowohl mit Strings als Schlüsseln, als auch mit Integers, und sogar in beliebiger Kombination. Werden zunächst Schlüssel definiert und dann wieder auf automatische Schlüssel zurückgegriffen, wird PHP den höchsten numerischen Schlüssel nehmen und eins dazuaddieren:

<?php

$arr = array(4 => 'Affe', 3 => 'Dschungel', 'Norden');

?>

erzeugt folgenden Array:

Array
(
    [4] => Affe
    [3] => Dschungel
    [5] => Norden
)

Wie du siehst, sind die Elemente in der Reihenfolge, in der du sie festlegst.

Auf Werte eines Arrays zugreifen[Bearbeiten]

Um auf einen Wert in einem Array zuzugreifen, verwenden wir eckige Klammern:

<?php

$kunde = array('nachname' => 'Müller', 'alter' => 42, 'email' => 'mail@example.com');

echo $kunde['alter']; // 42

$schluessel = 'nachname';

echo $kunde[$schluessel]; // Müller

?>

Genauso können wir auch Werte neu setzen oder neue Elemente hinzufügen:

<?php

$kunde['nachname'] = 'Mustermann'; // Element bekommt neuen Wert
$kunde['vorname'] = 'Max'; // neues Element mit Schlüssel "vorname" und Wert "Max"

?>

Bei der Zuweisung (nicht beim Auslesen) dürfen wir auch den Schlüssel weglassen, um neue Werte hinzuzufügen:

<?php

$arr[] = 'A';
$arr[] = 'B';
$arr[] = 'C';

// ist das gleiche wie

$arr = array('A', 'B', 'C');

?>

Die Schreibweise mit [] ist besonders in Schleifen hilfreich.

Mehrdimensionale Arrays[Bearbeiten]

Wenn du das Konzept von Arrays bis zu diesem Punkt nicht ganz verstanden hast, solltest du noch ein wenig experimentieren, denn jetzt gehen wir eine Stufe höher. Oder besser gesagt: tiefer.

Sieh dir einmal folgenden Code an:

<?php

$kunde1 = array(); // nicht notwendig, aber sauberer
$kunde1['nachname'] = 'Müller';
$kunde1['alter'] = 42;

$kunde2 = array();
$kunde2['nachname'] = 'Mustermann';
$kunde2['alter'] = 21;

$kunden = array($kunde1, $kunde2);
?>

Es entsteht in $kunden folgende Struktur:

Array
(
    [0] => Array
        (
            [nachname] => Müller
            [alter] => 42
        )

    [1] => Array
        (
            [nachname] => Mustermann
            [alter] => 21
        )

)

Was ist geschehen? Wir haben zwei Arrays in ein Array abgelegt. Ein so verschachteltes Array heißt mehrdimensionales Array, in diesem Fall ist es zweidimensional, wobei auch deutlich mehr Dimensionen möglich (aber natürlich nicht immer sinnvoll) sind.

Wir können nun so auf die Werte der tieferen Arrays zugreifen:

<?php

echo $kunden[0]['nachname']; // Müller
echo $kunden[1]['nachname']; // Mustermann

?>

Nützliche Funktionen im Zusammenhang mit Arrays[Bearbeiten]

  • isset gibt zurück, ob eine Variable oder ein Schlüssel in einem Array existiert.
  • unset löscht eine Variable oder ein Element aus einem Array.
  • count gibt die Anzahl der Elemente eines Arrays zurück

foreach[Bearbeiten]

Nun lernst du deine erste Kontrollstruktur kennen: foreach. Zu Kontrollstrukturen zählen Schleifen und Bedingungen, aber auch include. foreach ist eine Sonderform der Schleife. Mit ihr kannst du durch alle Elemente eines Arrays iterieren.

foreach ohne Schlüssel[Bearbeiten]

<table>
<th>
<td>Name</td>
<td>Alter</td>
</th>
<?php

// das vorige mehrdimensionale Array $kunden wird wiederverwendet

foreach ($kunden as $kunde) {
  echo '<tr>';
  echo '<td>' . $kunde['nachname'] . '</td>';
  echo '<td>' . $kunde['alter'] . '</td>';
  echo '</tr>';
}

?>

</table>

Die foreach-Schleife liest sich als: "Für jedes Element im Array $kunden, dessen Wert du der Variable $kunde zuweist, führe die Anweisungen innerhalb der geschweiften Klammern aus". Die geschweiften Klammern begrenzen bei den beiden Haupttypen von Kontrollstrukturen, Schleifen und Bedingungen, die auszuführenden Anweisungen. Übrigens bleiben die Variablen auch außerhalb der geschweiften Klammern gültig.

Hinweis

Auch hier gibt es eine gängige Konvention: Für jede Verschachtelung mit geschweiften Klammern werden die Anweisungen weiter eingerückt, üblicherweise mit vier Leerzeichen, hier sind es zwei. Verwende zum Einrücken nicht die Tabulator-Taste, außer dein Editor ist so eingestellt, dass ein Tab automatisch in Leerzeichen umgewandelt wird.

foreach mit Schlüssel[Bearbeiten]

Es gibt noch eine zweite Variante, die foreach-Schleife zu verwenden:

<?php

$array = array('Ort' => 'Dschungel', 'Tier' => 'Affe', 'Tätigkeit' => 'Schlafen');

foreach ($array as $key => $value) {
  echo $key . ': ' . $value;
  echo '<br />';
}

?>

Diese Schreibweise von foreach erlaubt es, auch die Schlüssel zwischenzuspeichern.

foreach und Referenzen[Bearbeiten]

$value ist normalerweise eine ganz normale Zuweisung, also eine Kopie des Wertes im Array. Es ist allerdings auch möglich, eine Referenz zu verwenden (mehr zu Referenzen findest du außerhalb dieser Einführung unter Referenzen). Das folgende Beispiel demonstriert dies:

<?php

$array = array(1, 3, 4, 5);

foreach ($array as &$value) {
  $value *= 2;
}
unset($value);
?>

Das Array $array hat jetzt die Werte 2, 6, 8 und 10, da du den Referenzoperator & (Kaufmännisches Und) verwendet hast. unset stellt danach noch sicher, dass die letzte Referenz, die auch nach der Schleife noch besteht, zerstört wird.