GRUNDLAGEN ZU ARRAYS
Arrays sind spezielle Variablen, die beliebig viele Werte (sogar unterschiedliche Datentypen) speichern können. Arrays werden oft auch Feld-Variablen oder Felder genannt.
Arrays sind nützlich für die reihenweise Verarbeitung von Daten. Wenn man z.B. von einer Berechnung 30 Ergebnisse bekommt und diese für die spätere Weiterverarbeitung zwischenspeichern möchte, dann wäre das mit den Datentypen Integer, float, sting etc. sehr umständlich, da diese Variablen nur einen Wert aufnehmen können. Man müsste dann 30 einzelne Variablen dafür haben. Besonders in Situationen, wo man die Anzahl der einzelnen Ergebnisse nicht kennt, wäre den Zwischenspeichern mit Einzelvariablen auch sehr arbeitsintensiv. Hier kommen Arrays ins Spiel: alle Ergebnissen können in einer Array-Variablen gespeichert werden.
Arrays können Mehrdimensional sein – d.h. im Array kann noch ein weiterer Array sein. Die Elemente eines Arrays bestehen aus einem Schlüssel bzw. Index und einem Wert. Es gibt zwei Arten von Arrays, die im Aufbau und auch beim Zugreifen auf einzelne Einträge in einem Array unterschiedlich sind.
Assoziative Arrays: Die einzelnen Werte (Value) innerhalb eines Arrays werden über einen eindeutigen Schlüssel (Key genannt) angesprochen.
Numerische indizierte Arrays: Die einzelnen Werte (Value) innerhalb eines Arrays werden über einen Index, einer fortlaufenden Nummer, angesprochen. Es ist aber auch möglich, Indexwerte manuell zu vergeben.
Ein indiziertes Array
$land = array ("Polen", "Kuba", "Schweden");
Strings werden in Anführungszeichen gesetzt, double, integer ohne.
Entspricht:
Auf einen indizierten Array greift man folgendermaßen zu:
$land[INDEX];
echo $land[2];
Als Ergebnis sollte „Schweden“ rauskommen.
Assoziative Arrays
Bei diesen Arrays werden keine Indizes benutzt, sondern Schlüssel über deren Wert man an die einzelnen Werte zugreifen kann. Der Vorteil zu indizierten Arrays ist, dass man einen beliebigen Namen für den Schlüssel vergeben und somit bedeutungstragend werden.
<?php
$stadt = array("München" => "Deutschland",
"Metz" => "Frankreich",
"Istanbul" => "Türkei");
$l = "München";
echo "Die Stadt " . $l . " ist in " . $stadt["München"] . "<br>" ;
echo "Die Stadt " . $l . " ist in " . $stadt[$l];
?>
Im Internetbrowser sollte folgendes erscheinen:
Auf das assoziative Array wird mit „$auswahl = $stadt[München];“ zugegriffen. Bei einem „echo $auswahl;“ sollte „Deutschland“ angezeigt werden.
Arrays ändern
Indiziert:
$land[2] = "Luxemburg";
Assoziativ:
$stadt["München"] = "Germany";
Um einen Eintrag aus einem Array zu löschen, wird die Funktion unset() verwendet.
Indizierter Array: unset ($land[1]);
Assoziativer Array: unset($stadt[„Metz“]);
Erweiterung von Arrays
Indiziert:
$land[] = Wert;
Bei einem indizierten Array braucht man keinen Wert anzugeben. Das Array wird am Ende ergänzt und der Index automatisch erhöht.
Assoziativ:
$stadt["Key"] = Wert;
Bei einem assoziativen Array muss der Schlüssel/Key angegeben werden, anderenfalls verwendet PHP automatisch einen numerischen Indexwert dafür. Ist der Schlüssel bereits vergeben, dann wird kein Element hinzugefügt, sondern der bestehende überschrieben.
Assoziative und indizierte Arrays schließen sich nicht gegenseitig aus. Eine Mischform ist möglich.
Ausgabe des Arrays mit print_r
<?php
$stadt = array("München" => "Deutschland",
"Metz" => "Frankreich",
"Istanbul" => "Türkei");
echo "<pre>"; // Zeilenweise anzeigen
print_r ($stadt);
echo "</pre>";
?>
Der Internetbrowser zeigt den kompletten Inhalt des Arrays an:
Schleifen (bspw. um Daten aus einem eindimensionalen Array zu extrahieren)
Mit der foreach() -Schleife kann man einzelne Werte aus dem Array auslesen. Es wird jedes Element in eine neue Variable zwischengespeichert. Der Vorteil dieser Schleife ist, dass man nicht die Anzahl der Array-Einträge kennen muss, noch den Schlüssel/Key. Die Schleife läuft bis zum letzten Eintrag des Arrays durch.
Die foreach()-Schleife bei indixierten Arrays:
$land = array ("Polen", "Kuba", "Schweden");
foreach ($land as $value) {
echo "Wert: $value<br>\n";
}
Der Internetbrowser zeigt diese Daten an:
Die foreach()-Schleife bei assoziativen Arrays:
$stadt = array("München" => "Deutschland",
"Metz" => "Frankreich",
"Istanbul" => "Türkei");
foreach ($stadt as $key => $value) {
echo "$key ist in $value<br>";
}
Der Internetbrowser zeigt diese Daten an:
Mehrdimensionale Arrays (INDIZIERT)
Mehrdimensionale Arrays sind verschachtelte Arrays, man sprich auch in diesem Kontext von inneren und äußeren Arrays.
Mehrdimensionale Arrays können assoziativ sein und auch numerisch indiziert. Eine Mischform ist hierbei auch möglich.
Aufbauschema eines numerisch-indizierten mehrdimensionaler Arrays:
So kann man auf eine bestimme Angabe in einem mehrdimensionalen indizierten Array zugreifen:
$kunde = array
(
array ("Jochen",
"DEU",
"Geburtstag 12.09.1974"
),
array ("Igor",
"RUS",
"Geburtstag 19.05.1966
"
),
array ("Carlos",
"ESP",
"Geburtstag 24.02.1955
"
),
);
echo "Der Kunde " . $kunde[0][0] . " hat am " . $kunde[0][2] . " Geburtstag und kommt aus " . $kunde[0][1] . "</br>";
Der Internetbrowser sollte folgendes anzeigen:
Erweitern kann man einen numerisch-indizierten mehrdimensionalen Array so:
$kunde[3][0] = "Hakan";
$kunde[3][1] = "TUR";
$kunde[3][2] = "Geburtstag 23.08.71";
Hier nochmal der komplette numerisch-indizierte mehrdimensionale Array inkl. Erweiterung und Ausgabe:
<?php
// ein mehrdimensionaler numerisch-indizierter Array wird angelegt
$kunde = array
(
array ("Jochen",
"DEU",
"Geburtstag 12.09.1974"
),
array ("Igor",
"RUS",
"Geburtstag 19.05.1966
"
),
array ("Carlos",
"ESP",
"Geburtstag 24.02.1955
"
),
);
// der erste Kunde wird mit seinen "Eckdaten" angezeigt
echo "Der Kunde " . $kunde[0][0] . " hat am " . $kunde[0][2] . " Geburtstag und kommt aus " . $kunde[0][1] . "</br>";
// der Array wird um einen neuen Kunden "Hakan" erweitert
$kunde[3][0] = "Hakan";
$kunde[3][1] = "TUR";
$kunde[3][2] = "Geburtstag 23.08.71";
// der Array wird ausgegeben
echo "<pre>";
print_r($kunde);
echo "</pre>";
?>
Die Ausgabe im Browser sieht so aus:
Man kann für die Ausgabe var_dump oder auf var_export verwenden:
var_dump($kunde);
Im Browser würde es so ausschauen:
Mehrdimensionale Arrays (ASSOZIATIV)
Der Aufbau eines assoziativen Arrays könnte man sich so vorstellen:
Einen mehrdimensionalen assoziativen Array anlegen und ausgeben:
// ein mehrdimensionaler assoziativer Array wird angelegt
$staat = array
(
"Deutschland" => array ("Sprache" => "Deutsch",
"Hauptstadt" => "Berlin",
"Waehrung" => "Euro"
),
"Russland" => array ("Sprache" => "Russisch",
"Hauptstadt" => "Moskau",
"Waehrung" => "Rubel"
),
"Spanien" => array ("Sprache" => "Spanisch",
"Hauptstadt" => "Madrid",
"Waehrung" => "Euro"
)
);
// Ausgabe zu Russland ausgeben
echo "<h1>Russland:</h1>";
echo "Sprache: " . $staat["Russland"]["Sprache"] . "<br>";
echo "Hauptstadt: " . $staat["Russland"]["Hauptstadt"] . "<br>";
echo "Währung: " . $staat["Russland"]["Waehrung"] . "<br>";
// Ausgabe mt var_dump
echo "<hr><br><b>mit var_dump anzeigen: </b>";
var_dump($staat);
Im Internetbrowser erscheint es so:
Einen mehrdimensionaler assoziativer Array in einer Tabelle ausgeben:
echo "<table border='1'>";
echo "<tr>";
echo "<th width='140'>Land</th>";
echo "<th width='140'>Sprache</th>";
echo "<th width='140'>Hauptstadt</th>";
echo "<th width='140'>Währung</th>";
echo "</tr>";
$staat = array (
"Deutschland" => array ("Deutsch", "Berlin", "Euro"),
"Russland" => array ("Russisch", "Moskau", "Rubel"),
"Spanien" => array ("Spanisch", "Madrid", "Euro")
);
foreach ($staat as $key => $ausgeben) {
list ($sprache, $hauptstadt, $waehrung) = $ausgeben;
echo "<tr>";
echo "<td>" . $key . "</td>";
echo "<td>" . $sprache . "</td>";
echo "<td>" . $hauptstadt . "</td>";
echo "<td>" . $waehrung . "</td>";
echo "</tr>";
}
echo "</table>";
Die Ausgabe der Tabelle im Internetbrowser sollte so dargestellt werden:
Hier haben wir auf bereits oben erwähnte Elemente zurückgegriffen, bis auf die Funktion list ().