decocode decocode deco    

Arbeiten mit Feldvariablen (Arrays) #

Arrays sind Variablen, die mehrere Werte gleichzeitig enthalten können. Diese Werte können Zahlen, Zeichenketten oder selbst wiederum Arrays sein. Auf diese Weise lassen sich mehrdimensionale Variablen definieren. Arrays können mit array() initialisiert werden. Wurde das Array bereits initialisert wird es durch diese Funktion geleert (Löschung aller Werte des Arrays).

Beispiel:
$a = array();

Jedem Wert, der in einem Array gespeichert ist, muss ein Index zugeordnet sein, über das der Wert angesprochen werden kann (ähnlich wie in der Mathematik z. B. a1, a2, a3, …). Der Index folgt auf den Variablennamen in eckigen Klammern.

Beispiel:
$a[0] = 1234;

Wird kein Index angegeben, so wird automatisch der dem zuletzt vergebenen Index nächsthöhere Wert verwendet. Wurde bisher kein Index vergeben, so trägt der erste Index den Wert 0. Die Klammern müssen dennoch angegeben werden.

Beispiel:
$a[] = 5678; (Index wäre hier nach dem obigen Beispiel 1)

Bei mehrdimensionalen Arrays wird die nächste Dimension durch ein weiteres Paar eckiger Klammern angegeben.

Beispiel:
$b[3][0] = "hallo";

Ein Array kann auch mit einer Folge von Werten belegt werden. Dabei werden die Indizes für die Werte von 0 an aufsteigen der Reihenfolge der Werte entsprechend automatisch vergeben. Die Typen der Werte können innerhalb eines Arrays gemischt auftreten. Sie werden durch Komma , getrennt.

Beispiel:
$c = array("hallo", "Welt!", 123, "", $a, 0);

Beispiel für die Verwendung eines Arrays:

Quelltext auswählen
1
2
3
4
5
6
7
<?php
  $tage = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
  $monate = array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
  $now = time();
  echo "Heute ist ".$tage[date("w", $now)].", der ".date("j", $now).". ".$monate[date("n", $now)-1]." ".date("Y", $now).".<br>";
  echo "Today is ".date("l", $now).", ".date("F", $now)." ".date("j", $now)."<sup>".date("S", $now)."</sup> ".date("Y", $now).".";
?>

Die Datumsfunktion date() liefert die numerischen Werte für Tag und Monat, mit denen aus den Arrays der richtige String für die Formulierung des Ausgabesatzes gewählt wird.

Assoziative Arrays #

Statt numerischen Indizes können den Werten eines Arrays auch assoziative Strings als Index zugeordnet werden. Grundsätzlich können die Namen der Indizes ohne Anführungszeichen geschrieben werden, um aber Fehler durch reservierte Begriffe wie z. B. default zu vermeiden, sollte man assoziative Indizes in Anführungszeichen setzen. Bei der Interpretation von Indexnamen wird Groß- und Kleinschreibung unterschieden. $a['Name'] ist also nicht die gleiche Variable wie $a['name'].

Beispiel:
$adressen[0]['vorname'] = "Petra";

Um ein assoziatives Array mit einer Reihe von Werten zu definieren, wird die Zuordnung nach dem SchemaIndex => Wert vorgenommen.

Beispiel:
$adressen[0] = array("vorname" => "Petra", "nachname" => "Meier", "strasse" => "Hafenstraße", "hausnummer" => "34b", "plz" => "10999", "ort" => "Berlin");

Arrays verarbeiten #

Die Inhalte eines kompletten Arrays lassen sich auf unterschiedliche Weise anzeigen:

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
  $a = array("blau", "rot", "gelb");
  $c = array("hallo", "Welt!", 123, "", $a, 0);
  
  // nur Werte anzeigen
  foreach ($c as $value) {
    echo $value."<br>";
  }
  reset($c);  // setzt den Zeiger nach foreach() zurück
  echo "<hr>";
  
  // Indizes und Werte anzeigen mit each()
  while ($value = each($c)) {
    echo $value[0]." - ".$value[1]."<br>";
  }
  reset($c);  // setzt den Zeiger nach each() zurück
  echo "<hr>";
  
  // Indizes und Werte über Schleife mit for() ausgeben (nicht bei assoziativen Arrays)
  for ($i = 0; $i < count($c); $i++) {
    echo $i." - ".$c[$i]."<br>";
  }
  echo "<hr>";
  
  // Indizes und Werte schnell ausgeben
  echo "<pre>";
  print_r($c);
  exit("</pre>");
  echo "<hr>";
?>

Um Arrays auszulesen, steht eine Vielzahl von Funktionen zur Verfügung, die hier kurz beschrieben werden:

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
is_array($array)  // prüft, ob eine Variable ein Array enthält
count($array)  // gibt die Anzahl der Elemente eines Arrays zurück
array_count_values($array)  // gibt ein Array mit den Werten eines Arrays als Index und der Anzahl ihres Vorkommens als Wert zurück
in_array($value, $array)  // prüft, ob ein Array den Wert $value enthält
array_search($value, $array) // gibt den ersten Index eines Arrays zurück, der den Wert $value enthält
array_key_exists($index, $array)  // prüft, ob ein Index $index im array $array vorhanden ist
array_keys($array)  // gibt ein Array mit den Indizes eines Arrays zurück
array_keys($array, $value)  // gibt ein Array mit den Indizes eines Arrays zurück, die den Wert $value enthalten
array_values($array)  // gibt ein Array mit den Werten eines Arrays zurück (wandelt assoziative Indizes in numerische um)

array_chunk($array, $n)  // erzeugt Teilarrays mit $n Elementen; Indizes werden neu gebildet
array_chunk($array, $n, TRUE)  // erzeugt Teilarrays mit $n Elementen; Indizes bleiben erhalten
array_slice($array, $i, $n)  // erzeugt ein Teilarray von $array mit $n Elementen ab Element $i; Indizes werden neu gebildet
array_slice($array, $i, $n, TRUE)  // erzeugt ein Teilarray von $array mit $n Elementen ab Element $i; Indizes bleiben erhalten

array_rand($array, $n)  // gibt ein Array mit einer zufälligen Auswahl von $n Elementen des Arrays $array zurück
array_sum($array) // gibt die Summe aller Werte eines Arrays zurück (wenn diese numerisch sind)
list($a, $b, $c) = $array  // weist den Variablen $a, $b und $c die Werte der ersten drei Indizes des Arrays $array zu
extract($array)  // wandelt alle Indizes eines assoziativen Arrays in Variablen um und weist diesen die Werte der Indizes zu

// Weitere Funktionen:
array_filter($array, "funktion")  // filtert ein Array nach einer benutzerdefinierten Funktion

Um Arrays mit Werten zu füllen oder die Werte zu verändern, steht eine Vielzahl von Funktionen zur Verfügung, die hier kurz beschrieben werden:

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
range($a, $b, $step)  // erzeugt ein Array mit Werten im Bereich $a bis $b im Abstand von $step; Werte können auch Buchstaben sein
array_fill($i, $n, $value)  // füllt $n Elemente eines Arrays ab Index $i mit dem Wert $value
array_pad($array, $n, $value) // erweitert ein Array auf insgesamt $n Elemente; neue Elemente erhalten den Wert $value; ist $n negativ werden die Elemente vorangestellt

array_shift($array)  // löscht das erste Element eines Arrays und gibt dessen Wert zurück; Indizes werden neu gebildet
array_pop($array)  // löscht das letzte Element eines Arrays und gibt dessen Wert zurück
array_unshift($array, $a, $b, …)  // fügt die Werte $a, $b etc. an den Anfang eines Arrays an; Indizes werden neu gebildet
array_push($array, $a, $b, …)  // fügt die Werte $a, $b etc. an das Ende eines Arrays an
array_splice($array, $i, $n, $array2)  // ersetzt $n Elemente eines Arrays ab Element $i durch das Array $array2

$array = $array1 + $array2  // ergänzt das Array $array1 um alle Elemente von $array2, deren Indizes noch nicht existieren
array_merge($array1, $array2)  // ergänzt das Array $array1 um das Array $array2; assoziative Indizes werden überschrieben, numerische Indizes werden ggf. erhöht
array_merge_recursive($array1, $array2)  // wie array_merge(), nur rekursiv

array_combine($keys, $values)  // erzeugt ein Array mit den Werten von $keys als Indizes und den Werten von $values als Werte
compact($a, $b, $c)  // erzeugt ein Array mit den Variablennamen $a, $b und $c als Indizes und weist diesen die Werte der Variablen zu

array_unique($array)  // reduziert ein Array, so dass keine Werte mehrfach enthalten sind
array_flip($array)  // tauscht Indizes und Werte gegeneinander aus
array_reverse($array)  // kehrt nur die Reihefolge von Werten in einem Array um
array_reverse($array, TRUE)  // kehrt die Reihefolge von Indizes und Werten in einem Array um

array_change_key_case($array, CASE_LOWER)  // wandelt alle Indizes in Kleinbuchstaben um
array_change_key_case($array, CASE_UPPER)  // wandelt alle Indizes in Großbuchstaben um

// Weitere Funktionen:
array_walk($array, "funktion")  // wendet eine benutzerdefinierte Funktion auf ein Array an
array_walk_recursive($array, "funktion")  // wie array_walk(), nur rekursiv
array_map("funktion", $array)  // wendet eine Callback-Funktion auf alle Elemente des Arrays an
array_reduce($array, "funktion")  // reduziert ein Array mit Hilfe einer Callback-Funktion

Wird ein Array Element für Element ausgelesen, wird ein so genannter Pointer auf das aktuelle Element gesetzt. Dieser Pointer kann abgefragt oder eingestellt werden:

Quelltext auswählen
1
2
3
4
5
6
7
each($array)  // gibt Index und Wert des aktuellen Elements zurück und erhöht den Pointer um 1
key($array)  // gibt den Index des aktuellen Elements zurück
current($array)  // gibt den Wert des aktuellen Elements zurück
prev($array)  // vermindert den Pointer um 1 und gibt den Wert des Elements zurück
next($array)  // erhöht den Pointer um 1 und gibt den Wert des Elements zurück
end($array)  // setzt dem Pointer an das Ende des Arrays und gibt den Wert des Elements zurück
reset($array)  // setzt dem Pointer an den Anfang des Arrays und gibt den Wert des Elements zurück

Weiterhin existieren Funktionen zum Sortieren von Arrays:

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Sortieren nach Wert; Indizes werden neu gebildet
sort($array)  // vorwärts sortieren
rsort($array)  // rückwärts sortieren

// Sortieren nach Wert; Indizes bleiben erhalten
asort($array)  // vorwärts sortieren
arsort($array)  // rückwärts sortieren

// Sortieren nach Index
ksort($array)  // vorwärts sortieren
krsort($array)  // rückwärts sortieren

// "natürliche" Sortierung
natsort($array)  // case-sensitive sortieren
natcasesort($array)  // case-insensitive sortieren

// Sortieren nach benutzerdefinierter Funktion
usort($array, "funktion")  // nach Werten sortieren; Indizes werden neu gebildet
uasort($array, "funktion")  // nach Werten sortieren; Indizes bleiben erhalten
uksort($array, "funktion")  // nach Indizes sortieren

// Mehrere oder mehrdimensionale Arrays sortieren
array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_DESC, SORT_NUMERIC)

shuffle($array)  // Array zufällig mischen

Schließlich kann man Arrays noch mit Hilfe bestimmter Funktionen vergleichen:

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Unterschiede ermitteln
array_diff($array1, $array2)  // Werte vergleichen
array_diff_assoc($array1, $array2)  // Werte vergleichen mit Indexprüfung
array_diff_key($array1, $array2)  // Schlüssel vergleichen
array_diff_uassoc($array1, $array2, "funktion")  // Werte vergleichen mit Indexprüfung; mit benutzerdefinierter Funktion
array_diff_ukey($array1, $array2, "funktion")  // Schlüssel vergleichen; mit benutzerdefinierter Funktion

// Unterschiede ermitteln mit Callback-Funkton
array_udiff($array1, $array2, "funktion")  // Werte vergleichen
array_udiff_assoc($array1, $array2, "funktion")  // Werte vergleichen mit Indexprüfung
array_udiff_uassoc($array1, $array2, "funktion1", "funktion2")  // Werte vergleichen mit Indexprüfung; mit benutzerdefinierter Funktion

// Gemeinsamkeiten ermitteln
array_intersect($array1, $array2)  // Werte vergleichen
array_intersect_assoc($array1, $array2)  // Werte vergleichen mit Indexprüfung
array_intersect_key($array1, $array2)  // Schlüssel vergleichen
array_intersect_uassoc($array1, $array2, "funktion")  // Werte vergleichen mit Indexprüfung; mit benutzerdefinierter Funktion
array_intersect_ukey($array1, $array2, "funktion")  // Schlüssel vergleichen; mit benutzerdefinierter Funktion

// Gemeinsamkeiten ermitteln mit Callback-Funkton
array_uintersect($array1, $array2, "funktion")  // Werte vergleichen
array_uintersect_assoc($array1, $array2, "funktion")  // Werte vergleichen mit Indexprüfung
array_uintersect_uassoc($array1, $array2, "funktion1", "funktion2")  // Werte vergleichen mit Indexprüfung; mit benutzerdefinierter Funktion