PHP-Programmierung (String,Felder, ARRAYs)

Was sind Strings und was sind Felder?

In früheren Programmiersprachen wie Fortran, Cobol, Assembler konnte man Namen, Adressen etc. nur in sog. Felder speichern. Das hatte Vor- und Nachteile! Der Vorteil war, dass man jeden Buchstaben in einem solchen Feld direkt ansprechen konnte. Ein Feld war halt einfach eine Anzahl von Bytes, die man mit einem Namen versah und dann die Anzahl der Feldelemente abzählte.
Schon mit PL1 kam dann der Datentyp STRING auf, der zwar immer noch auf Felder intern abgebildet war, jedoch eigene Funktionen sog. Stringfunktionen wie Length, Pos etc. hatte. Intern wurde einfach nur geschickt abgezählt und dann das Ergebnis zurückgemeldet. Dann ging man dazu über, dass man dem String ein Längenfeld voranstellte, das immer die Länge des Feldes inne hatte. Das Feld, das hinter einem String stand war dann um genau 1 Byte länger als die Anzahl der Zeichen im String.

Dann kam C mit seinen sog. Null-Terminierten Strings. Felder und Strings wurden so dargestellt, dass am Ende jedes Strings immer ein Wert 0 (hexadezimal 00) stand, der das Ende des Strings anzeigte. In C war es dann aber auch möglich, viele Strings unter einem Namen zu benennen und diese Struktur dann in einem Feld zu verarbeiten. Eine Sammlung von Namen war nun ein eindimensionales Feld, das aus Strings bestand. Anders als bei Fortran oder Assembler, wo eine Sammlung von Namen als Matrix abgebildet wurde, da man ja keinen Datentyp String kannte, aber ein Byte adressieren musste.

Wie sieht das aber in PHP aus?

Wenn ich in PHP auf die Variable $name einen String zuweisen will, kann ich das wie in C tun mit $name = „name der Person“; Die Variable $name ist nun eindimensional! Ich kann also nicht sagen $name[1] ist der Buchstabe „a“, was ich in den älteren Programmiersprachen könnte. Um das „a“ aus name herauszulösen benötige ich eine sog. Stringfunktion z.B. substr($name,1,1)!
Bei Strings muss ich also immer mit Stringfunktionen arbeiten. Dafür kann ich aber eine Liste von Namen in ein Feld speichern, was dann ein ARRAY aus Strings bildet.

Warum jetzt diese lange Einleitung? In PHP benötige ich eigentlich keine Datentypen, solange sie eindimensional sind: Ich muss nicht wie in C definieren, dass die Variabele $name nun ein String der maximalen Länge x ist! In dem Punkt ist PHP „typenlos“! Das heisst:

$name = „Müller“;

Bestimmt beim Ablauf, dass die Variable gerade einen String beinhaltet. Wenn ich später im Programm schreibe $name = 1, dann wäre eigentlich die Variable ab jetzt vom Typ „Ganze Zahl“!
Da es solche expliziten Datentypen in PHP eigentlich nicht gibt, tut sich der Programmierer hier leichter. Allerdings gibt der damit die Kenntnis auf, zu wissen wie viel Speicherplatz die Variable benötigt auf.

Wenn ich nun mit Feldern arbeiten will, dann muss ich dies dem Programm sagen. Dazu gibt es aber mehrere Möglichkeiten:

einfache Arrays in PHP

Zum einen kann man ein Feld als vordefinierte Variable definieren und dieser gleich Werte zu weisen. Dies wird oft dazu benutzt, derartige Variablen als Konstanten zu benutzen.

$Satz = array(„Müller“, „Mayer“, „Schulze“);

Damit ist dann, wenn man weiß, dass PHP bei Feldern mit 0 anfängt zu zählen, mit

$Mueller = $Satz[0]; $Mayer = $Satz[1]; $Schulze = $Satz[2];

Wie PHP aber halt so ist, kann man diese Vorabdefinition auch unterlassen. Sie können auch gleich folgende Zuweisungen machen:

$Satz[0] = „Müller“; $Satz[1]= „Mayer“; $Satz[2] = „Schulze“;

Außerdem gibt es eine Vielzahl von sog. Array-Funktionen, die ein Feld – also einen Array – als Ergebnis erzeugen. Diese „flachen“ Arrays können sehr nützlich sein:

Beispiel
Die haben in der Variablen $Dateiname einen Namen einer Datei mit Verzeichnisangaben stehen, also z.B. $Dateiname = „D:/01_allgemein/02_ebooks/my-ebook.pdf“;
Sie wollen nun den Dateinamen zerlegen in die Verzeichnisnamen. Das geht am Einfachsten durch folgende Anweisung

$aDirs = explode(„/“,$Dateiname);

Daraus wird dann folgender Array gebildet:
$aDirs[0] = „D:“; $aDirs[1] = „01_allgemein“; $aDirs[2] = „02_ebooks“;
$aDirs[3] = „my-ebook.pdf“;
So mit können Sie ohne großartige Scannroutinen auf die Bestandteile des Dateinamens zugreifen.

Diese Art der Felder sind eigentlich bekannt und von fast jeder Programmiersprache angeboten. Die Schwierigkeiten mit dieser Art der Arrays sind, dass man immer die Komponente des Arrays kennen muss um zuzugreifen – also $aDirs[1] ! Wie gelangt man zu dem Wissen, welche Information in der Komponente [1] steht?
Genauer: Angenommen Sie haben eine Mitarbeiterdatei mit dem Namen des Mitarbeiters und des Alters. Sie lesen die Datei ins Programm und zwar in 2 Felder $aMitarb und $aAlter;
Jetzt suchen Sie nach dem Alter des Mitarbeites Müller, der sei in der Komponente 23 – also $aMitarb[23] = „Müller“ und $aAlter[23] = 54;.
Sie suchen nach dem Namen „Müller“! Nun bleibt nichts anderes übrig, als diesen Namen über den Array zu suchen. Damit dann die Komponente zu finden und diese Zahl dann als Info zu benutzen!

Was nicht alle Programmiersprachen können und hier PHP eigentlich ganz groß ist: Sie könnten u. U. schreiben $aAlter[‚Müller‘]! Dazu aber später im nächsten Artikel!

Wenn Sie sich die Variablennamen anschauen, die ich benutzte, dann haben wir $aDirs, $aMitarb, $aAlter etc. Klar können Sie die Variablennamen benennen wie Sie wollen, doch sollten Sie sich angewöhnen, Felder anders als normale Variablen zu benennen, dann wissen Sie immer was denn der Typ der verwendeten Variablen ist. Für eindimensionale Array stelle ich immer ein a vor den Namen – somit $aMitarb, wenn ich ein mehrdimensionales Feld habe dann habe ich ja eigentlich eine Matrix vor mir, deshalb stelle ich ein m vor die Variable – also $mDB_Saetze, $mRecords usw. Glauben Sie mir es hilft ungemein, wenn man sich von vorne herein, an eine solche Nomenklatur gewöhnt. Denn bedenken Sie, Sie müssen das Programm auch noch in 3 Jahren lesen und verstehen können.

So das war der 1. Teil des etwas größeren Artikels über Array in PHP. Demnächst werden wir uns die weiteren Ausgestaltungen von Arrays anschauen und einiges über die nützlichen Array-Funktionen kennenlernen.

Bis dahin, viel Erfolg
Bernd Klüppelberg

Bisher gibt es keinen Kommentar. Schreiben Sie einen Kommentar!

Schreibe einen Kommentar