PHP-Arrays


Array

Anzahl der Elemente

Die Funktion count() gibt die Anzahl der Array-Elemente zurück:
print 'Das Array anam hat '.count($anam)." Elemente<br />\n";
ergibt den Ausgabe-Text
Das Array anam hat 3 Elemente


Array-Elemente schreiben

Beim Schreiben verwendet man die gleiche Syntax wie beim Lesen:
$anam[2] = 'Dieter';
ändert den Wert des Elements mit dem Index 2 auf den Wert 'Dieter'.

Assoziative Arrays

Array-Elemente schreiben und lesen

Ein Element eines assoziatives Arrays wird mit seinem Schlüssel (key) adressiert:
$bnam['zuname'] = 'Weber';
Beim Lesen wird die gleiche Syntax verwendet:
print 'Zuname = '.$bnam['zuname']."<br />\n";
das ergibt diesen Ausgabe-Text:
Zuname = Weber

Tipp: Als Schlüssel verwendet man am besten 'sprechende' Namen, jedoch mit den gleichen Einschränkungen wie für die Namen von Variablen: Nur Klein-Buchstaben und Ziffern, keine Leerzeichen oder Sonderzeichen (Umlaute, Interpunktionen), beginnend mit einem Buchstaben.

Mehrdimensionale Arrays

→ Pixel-Grafik wird typisch durch 2dimensionale Arrays dargestellt.
Auch dabei werden zur Adressierung eines Bildpunkts numerische Indices mit der Bedeutung 'Zeile' und 'Spalte' verwendet.

Bei Bedarf kann man Arrays mit beliebig vielen Dimensionen definieren und verwenden. Bei mehr als 3 Dimensionen wird lediglich die symbolische Darstellung schwieriger.


2dimensionales Array mit gemischter Adressierung

Ein Array von Personen-Daten könnte man so programmieren:
$pa = array();
$i = 0;
$pa[$i++] = array('vn'=>'Anna','zn'=>'Zulehner');
$pa[$i++] = array('vn'=>'Bert','zn'=>'Kneisser');
$pa[$i++] = array('vn'=>'Christa','zn'=>'Seifried');
Hier wird jede Person mit einem numerischen Index bezeichnet, danach die jeweiligen Personen-Daten mit einem assoziativen Schlüssel:
print 'Person[1] = '.$pa[1]['vn'].' '.$pa[1]['zn']."<br />\n";
ergibt
Person[1] = Bert Kneisser

Schleifen

Mit Schleifen wird der Zugriff auf Arrays stark vereinfacht, weil man jede Anweisung nur 1mal programmieren muss, diese jedoch innerhalb der Schleife beliebig oft ausgeführt wird.

Man muss allerdings dafür sorgen, dass bei jedem Durchlauf der Schleife ein anderes Array-Element adressiert wird.



Auch zur Ausgabe verwendet man eine Schleife.
Die for-Schleife ist flexibler, wenn man die Anzahl der Durchläufe nicht fix programmiert, sondern mit Funktion count() an die Anzahl der jeweils definierten Elemente des Arrays bindet.
for($i=0; $i<count($ga); $i++) {
if($i) {print ', ';}
print $ga[$i];
}
print "<br />\n";
erzeugt diese Ausgabe-Zeile:
0, 2, 4, 6, 8, 10



Das Beispiel ist für wenig erfahrene EntwicklerInnen eine anspruchsvolle Aufgabe. Es demonstriert jedoch gut die Verwendung verschachtelter Schleifen zur Arbeit mit mehrdimensionalen Arrays und hat den Vorteil, dass man die Ergebnisse ohne besondere Kenntnisse leicht kontrollieren kann.

Es ist zwar nicht unbedingt notwendig, jedoch sehr empfehlenswert, saubere Einrückungen zu verwenden und den Quelltext (nur mit → ASCII-Zeichen !) gut zu kommentieren.

• Lassen sie zunächst den inneren Teil mit dem 'Nachbarn-Zähler' weg: In diesem Fall erhält jedes Element des Arrays $na den gleichen Anfangswert -1
Überprüfen sie das mit einem Ausgabe-Programm (nächster Absatz).

• Danach werden die beiden inneren Schleifen ergänzt, mit denen die Anzahl der Nachbarn gezählt wird. Vor deren Beginn sind bereits die Indices $i und $j der jeweils untersuchten Zelle festgelegt.

Die beiden folgenden Schleifen durchlaufen mit $ii alle Nachbar-Zeilen und mit $jj alle Nachbar-Spalten (inklusive der eigenen).
Mit einer if-Bedingung wird untersucht, ob die beiden Variablen $ii,$jj Werte innerhalb des erlaubten Bereichs enthalten: Nur in diesem Fall wird der Wert der untersuchten Zelle erhöht:
$na[$i][$j]++;

Ein gutes Programm lässt sich mit wenig Aufwand an geänderte Anforderungen anpassen: Hier genügt eine Änderung der Variablen $imax,$jmax um das Beispiel für beliebig große Arrays zu berechnen.



Zur besseren Darstellung wurde hier eine 'echte' HTML-Tabelle verwendet:
Das Ergebnis wird - wie für alle Beispiele dieser Seite - Live mit PHP berechnet. Man findet den (hier etwas abweichenden) Quelltext mit den Links am unteren Ende der Webseite.
35553
58885
35553



Die äußere Schleife wird zum Durchlaufen aller numerisch indizierten Array-Elemente (Personen) mit einer 'gewöhnlichen' for-Schleife programmiert.
Zur besseren Übersicht wird das jeweilige assoziative Teil-Array (Daten einer einzelnen Person) an die Variable $p zugewiesen.

Zur Verarbeitung von assoziativen Arrays bietet PHP eine besondere Schleifen-Variante: In der foreach-Schleife wird jeder Schlüssel an die Variable $k zugewiesen, jeder Wert an $v
for($i=0;$i<count($pa);$i++) {
print "Person[".$i.']: ';
$p = $pa[$i];
foreach($p as $k=>$v) {
print $k.'='.$v.', ';
}
print "<br />\n";
}
ergibt
Person[0]: vn=Anna, zn=Zulehner,
Person[1]: vn=Bert, zn=Kneisser, sex=M,
Person[2]: vn=Eva, gebdat=1995-06-17, zn=Kurz,


Manche der Array-Funktionen überschneiden einander teilweise und sind nicht konsequent programmiert.
Heute ist die Entwicklung von PHP wesentlich straffer organisiert. Aus Rücksicht auf vorhandene Programme werden alte Funktionen jedoch nur selten und mit jahrelanger Toleranz-Zeit geändert oder abgeschafft.