Websiteentwicklung: PHP: Arrays
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Numerische Arrays
Ein Array ist ein Feld, welches verschiedene Elemente, verschiedenen Typs enthalten kann. Diese werden dann über ihren Index angesprochen. Das erste Element bekommt den Index 0, das zweite Element bekommt den Index 1 usw. .
Um Arrays zu erstellen, verwendet man das Sprachkonstrukt array. Auch wenn die Benutzung vergleichbar mit der einer Funktion ist, handelt es sich um keine Funktion!
Im folgenden wird ein eindimensionales Array namen erstellt:
<?php $namen = array('Hans', 'Anton', 'Tina', 'Max', 'Claudia'); ?>
Die einzelnen Einträge werden dann über ihren Index aufgerufen:
echo $namen[2];
Ausgabe:
Tina
Beachten Sie, dass die Nummerierung bei 0 anfängt! In unserem Beispiel wird also der dritte Name Tina ausgegeben, und nicht wie vielleicht erwartet Anton. Das Nichtbeachten dieser Eigenschaft kann leicht zu Fehlern führen.
[Bearbeiten] Assoziative Einträge
Es ist aber auch möglich Namen für die einzelnen Einträge zu vergeben, mit denen die Einträge angesprochen werden:
<?php $namen = array('Müller'=>'Hans', 'Maier'=>'Anton', 'Schmidt'=>'Tina', 'Wagner'=>'Max', 'Reiter'=>'Claudia'); ?>
Um den Namen Max ausgeben zu lassen, müsste man das schreiben:
echo $namen['Wagner'];
Ausgabe:
Max
[Bearbeiten] Hinzufügen von Einträgen
Um neue Elemente in ein Array hinzuzufügen kann man folgende Syntax verwenden:
<?php $array[] = 'wert'; $array[] = 'anderer wert'; ?>
[Bearbeiten] Mehrdimensionale Arrays
Arrays können beliebig viele Dimensionen haben. Das heißt, sie können beliebig verschachtelt sein.
Ein 2-dimensionales Array kann folgendermaßen erstellt werden:
<?php $personenliste = array( array( 'Name' => 'Max Gutensen', 'Adresse' => 'Breitscheider Straße 11', 'Ort' => 'Bremen', 'PLZ' => 54893 ), array( 'Name' => 'Lisa Meier', 'Adresse' => 'Lautenschlagerstraße 23b', 'Ort' => 'Stuttgart', 'PLZ' => 70173 ) ); ?>
Das numerische Array $personenliste enthält nun zwei Felder, die wiederum jeweils vier Felder enthalten.
Auf beispielsweise die zweite Adresse kann nun wie folgt zugegriffen werden:
<?php echo $personenliste[1]['Adresse']; // ?>
Ausgabe:
Lautenschlager Straße 23b
[Bearbeiten] Zählen der Einträge
Das Zählen der Einträge erfolgt durch die Funktion Count:
$menge_der_elemente = count($array);
[Bearbeiten] Einträge durchsuchen
Wenn man ein Array nach einem Eintrag durchsuchen will, geht das so:
<?php if (in_array('Hans', $namen)) { echo "Hans war hier!"; } ?>
[Bearbeiten] Sortieren der Einträge
Man kann Arrays auch sortieren. Möchte man die Werte sortieren, geht das mit asort:
asort($namen);
Wenn man aber nach den Namen der Werte sortieren lassen will (falls welche zugeteilt wurden) benutzt man ksort.
ksort($namen);
Um die die Werte bzw. Namen der Einträge in umgekehrter Reihenfolge sortieren will, geht das mit krsort bzw. arsort.
Manche Arrays, etwa mehrdimensionale, oder solche, die Instanzen von Klassen (Objekte) Inhalten, können nicht so einfach sortiert werden, dass die genannten Funktionen benutzt werden können. Für kompliziertere Sortieralgorithmen kann man sich eine eigene Funktion schreiben. Um die $personenliste aus dem Abschnitt "Mehrdimensionale Arrays" nach Postleitzahlen zu sortieren, kann wie folgt vorgegangen werden:
<?php function vergleiche($a, $b) { if ($a['PLZ'] == $b['PLZ']) { return 0; } return ($a['PLZ'] < $b['PLZ']) ? -1 : 1; } usort($personenliste, 'vergleiche'); ?>
Der Funktion usort wird neben dem zu sortierenden Array auch der Name der eigenen Sortierfunktion übergeben. Die Sortierfunktion muss:
- Wenn das erste Feld (hier $a) vorgestellt werden soll, -1 zurückgeben.
- Wenn die beiden Felder nicht getauscht werden sollen, 0 zurückgeben.
- Wenn das zweite Feld (hier $b) vorgestellt werden soll, 1 zurückgeben.
Um in einer Sortierfunktion Strings zu sortieren, kann strcmp($string1, $string2) verwendet werden, strcmp gibt wie erwartet -1, 0 oder 1 zurück.
Da man mit der Sortierung von Arrays allein nichts anfangen kann, kommt jetzt die Schleife Foreach.
[Bearbeiten] Foreach
Mit foreach werden alle Einträge eines Arrays einer anderen Variable zugewiesen, die man dann ausgeben kann. Die Variable, der man den Inhalt des Arrays übergibt, wird nach dem as definiert.
foreach ($array as $key => $name) { echo $key.': '.$name."<br />\r\n"; }
Wenn man den Key der Elemente des Arrays nicht benötigt, kann $key in der Schleife auch weggelassen werden:
foreach ($array as $name) { echo $name."\r\n"; }
[Bearbeiten] End
Mit end springt man an das Ende eines Arrays und gibt diesen Wert zurück
$namen = array('Hans', 'Anton', 'Tina', 'Max', 'Claudia'); echo end($namen);
Ausgabe: Claudia
[Bearbeiten] Arrays analysieren
Sollte es einmal notwendig, ein Array, das eventuell selbst aus Arrays besteht, genauer untersuchen zu müssen, hilft diese Funktion:
$arr = array("ich", array("bin", "nur"), array("ein", "kleiner"), "array", array("der", "dich"), "mag"); var_dump($arr);
Dies generiert folgende Ausgabe.
array(6) { [0]=> string(3) "ich" [1]=> array(2) { [0]=> string(3) "bin" [1]=> string(3) "nur" } [2]=> array(2) { [0]=> string(3) "ein" [1]=> string(7) "kleiner" } [3]=> string(5) "array" [4]=> array(2) { [0]=> string(3) "der" [1]=> string(4) "dich" } [5]=> string(3) "mag" }
Alternativ kann man die weniger komplexe Funktion print_r() verwenden.

