Auf diese Weise können Sie mit eigenen, einfachen Beispielenjede Funktion austesten: Zusätzlich können Sie auch eine Sortierung nach einer eigenen Funktion durchführen.Wie Sie eine Funkt
Trang 1Bei ihrer Verwendung müssen die Indizes nicht in einzelnen oder doppelten rungszeichen gesetzt werden Das erhöht die Lesbarkeit des Quellcodes.
Anfüh-Dynamische Inhalte
Wie bereits erwähnt, müssen auch die Datentypen in einem Array nicht einheitlich sein.Das wird in Listing 2.15 verdeutlicht Somit sind Arrays in PHP sehr dynamische Daten-felder, die mit Collections in Java vergleichbar sind:
Die Ausgabe dieses Arrays lautet array(3) { [2]=> int(0) [-5]=> float(0) [8]=> string(5)
"Hallo" }.
Löschen von Feldern
PHP bietet Ihnen die Möglichkeit, ganze Arrays zu löschen oder zu leeren Zusätzlichkönnen Sie einzelne Elemente aus einem Array entfernen Listing 2.16 zeigt, wie Sie
zunächst das Element mit dem Index 8 aus Listing 2.15 löschen, dann das Datenfeld $data leeren und abschließend die Referenz $data selbst entfernen Wenn Sie ein ganzes Array
nicht mehr benötigen, so können Sie direkt die Referenz entfernen PHP organisiertdabei das gesamte Speichermanagement:
<html><body>
<?php $personen=array(
'ich' => 'Frank', 'Vater' => 'Kurt', 'Bekannter' => 'Hans');
Listing 2.16: Löschen eines Elements sowie Löschen des gesamten Datenfelds
Trang 2Die Ausgabe dieses Skripts lautet:
array(2) { [2]=> int(0) [-5]=> float(0) } array(0) { }
NULL
Mehrdimensionale Datenfelder
Genauso dynamisch, wie Sie Elemente in einem Feld verwalten können, können Sie auchFelder in einem Feld verwalten Das führt zu mehrdimensionalen Arrays Eine Möglich-keit, ein mehrdimensionales Array anzulegen, zeigt Listing 2.17 Dort ist auch derZugriff auf das mehrdimensionale Datenfeld dargestellt Die Ausgabe ist identisch mitder Reihenfolge, in dem die einzelnen Elemente angelegt worden sind:
Ebenso können Sie auch bei einem mehrdimensionalen Datenfeld die Indizes frei len Das Beispiel in Listing 2.18 zeigt eine freie Definition der Indizes:
unset($data[8]); // löschen eines Elementes echo(var_dump($data).'<br>');
$data=Array(); // leeren des Arrays echo(var_dump($data).'<br>');
unset($data); // löschen des Arrays echo(var_dump($data).'<br>');
?>
</body></html>
<html><body>
<?php $kunden=array(
array('Frank','Dopatka'), array('Uli','Müller'), array('Max','Mustermann') );
Trang 3Wie auch bei einem eindimensionalen Array muss ein mehrdimensionales Array nichtbei seiner Initialisierung mit Werten gefüllt werden Die zweite Dimensionierung kannebenso dynamisch durchgeführt werden, wie Listing 2.19 zeigt:
PHP-Funktionen zur Bearbeitung von Datenfeldern
Die Sprache PHP verfügt über mächtige Funktionen zur Bearbeitung von Datenfeldern.Die Wichtigsten dieser Funktionen sind im Folgenden kurz zusammengefasst Wenn Sieeine vollständige Übersicht erhalten möchten, können Sie in Suchmaschinen wie Googlemit Begriffen wie „ PHP“, „ Array“ und „ Funktionen“ weitere, seltener verwendete
Funktionen abrufen Beispielsweise hat sich die Internetseite
http://www.phpcenter.de/de-html-manual/ref.array.html als sehr übersichtlich herausgestellt.
Für Sie als Programmierer ist es sinnvoll zu wissen, welche Funktionen PHP bereitsbereit stellt, damit Sie bei Bedarf darauf zugreifen können Es ist nicht ratsam, dass Sie
<html><body>
<?php $kunden=array(
'K1'=>array('VN'=>'Frank','N'=>'Dopatka'), 'K2'=>array('VN'=>'Uli','N'=>'Müller'), 'K3'=>array('VN'=>'Max','N'=>'Mustermann') );
Trang 4existierende Funktionen nachprogrammieren, da Sie mit Sicherheit weder die mance, noch die Fehlerfreiheit von PHP erreichen.
Perfor-Die erste Gruppe von Funktionen umfasst das Sortieren von Feldern Neben einer ligen Anordnung können Sie eine auf- bzw absteigende Sortierung wählen
zufäl-Listing 2.20 zeigt einen Anwendungsfall einer Sortierung Die Ausgabe lautet „ Frank“,
„ Max“ und dann „ Uli“ Auf diese Weise können Sie mit eigenen, einfachen Beispielenjede Funktion austesten:
Zusätzlich können Sie auch eine Sortierung nach einer eigenen Funktion durchführen.Wie Sie eine Funktion deklarieren und damit ein Datenfeld sortieren, wird in Kapitel2.1.5 vorgestellt
Ähnlich wie beim Auslesen einer Ergebnismenge aus einer Datenbank (Kapitel 2.2:
„ Zugriff auf eine MySQL-Datenbank“) kann man auch einen Zeiger über ein Datenfeldlaufen lassen Das wird oft bei der Suche nach einzelnen Elementen oder für eine Weiter-
assoziativen Feld bei
Tabelle 2.8: Sortierung eines Felds
<html><body>
<?php $kunden=array('Frank','Uli','Max');
Trang 5verarbeitung verwendet Zusätzlich können Sie ein Datenfeld nach der Anzahl der haltenen Elemente fragen.
ent-Interessant ist auch die Funktion array_walk, die eine eigene Funktion2 auf jedes Element
im Feld anwendet Damit können Sie eine Schleifenstruktur3 einsparen und erzeugenübersichtlichen Quellcode
In Listing 2.21 wird der Zeiger auf ein Datenfeld $kunden zunächst auf das erste Element mit der reset-Funktion gesetzt Dieses Element wird dann über die key- und current-Funk- tion ausgegeben Im Anschluss daran wird der Zeiger über die next-Funktion weiter mit
erneuter Ausgabe bewegt:
count($arr) odersize_of($arr)
gibt die Anzahl der Elemente im Datenfeld zurück
reset($arr) setzt den internen Zeiger im Datenfeld auf das erste Elementend($arr) setzt den internen Zeiger im Datenfeld auf das letzte Elementcurrent($arr) oder
pos($arr)
gibt den Inhalt des Elements zurück, auf dem der Zeiger steht
key($arr) gibt den Index des Elements zurück, auf dem der Zeiger stehtnext($arr) setzt den internen Zeiger im Datenfeld um 1 nach vorneprev($arr) setzt den internen Zeiger im Datenfeld um 1 zurückarray_walk($arr, func) wendet eine selbst definierte Funktion auf jedes Element des Datenfelds an
Tabelle 2.10: Zugriffsfunktionen auf ein Datenfeld
2 Kapitel 2.1.5
3 Kapitel 2.1.4
<html><body>
<?php $kunden=array('Frank','Uli','Max');
Trang 6Abschließend werden weitere Funktionen zur Behandlung von Datenfeldern vorgestellt,die sich im Alltag als sinnvoll erweisen Diese betreffen unter anderem die Verwaltungmehrerer Felder.
Ebenso ist die Funktion in_array hervorzuheben, die eine automatische Suche nach
einem Element durchführt Aus eigener Erfahrung wird diese Funktion selten det und stattdessen eine kompliziertere und inperformante Schleifenkonstruktion
In diesem Kapitel wird ein wichtiges Konzept jeder prozeduralen Programmiersprachevorgestellt Mithilfe einer Verzweigung sind Sie in der Lage, eine alternative AusführungIhrer Anwendung zu programmieren Sie können damit auf eine eintretende Bedingungentsprechend reagieren
Ein Beispiel ist das Anmelden an ein Internetportal Wenn Sie eine richtige Kombinationvon Benutzername und Kennwort eingeben, so sollen Sie in das Portal gelangen.Ansonsten soll eine Fehlermeldung angezeigt werden Die richtigen Angaben soll PHPspäter aus einer Datenbank entnehmen Dabei muss eine Verbindung zur Datenbankaufgebaut werden Nun kann es vorkommen, dass der Datenbankserver nicht online ist
In diesem Fall kann man nicht prüfen, ob die richtigen Daten eingegeben wurden Wenndie Verbindung also hergestellt wurde, kann erst die Prüfung erfolgen Ansonsten mussder Anwender eine Fehlermeldung erhalten, dass technische Probleme bei der Prüfungaufgetreten sind, wofür sich der Anbieter entschuldigt
Immer wenn Sie im Sprachgebrauch eine „ Wenn-Dann“- oder „ ten“- Formulierung verwenden, werden Sie in Ihrer Anwendung eine Verzweigung ein-setzen Eine Verzweigung ist auch immer an eine Bedingung geknüpft, die entwedererfüllt oder nicht erfüllt sein kann Bei der Bedingung handelt es sich demnach um einen
array_diff($arr1, $arr2, ) ermittelt Unterschiede in Datenfeldern und gibt diese als neues Datenfeld
zurückarray_merge($arr1, $arr2) verbindet zwei Datenfelder zu einem neuen Feldarray_pad($arr, $len, $wert) verkürzt (bei $len<0) oder verlängert ein nummerisches Feld um $len Ele-
mente und ersetzt leere Elementein_array($wert, $arr) gibt TRUE zurück, wenn ein Wert in einem Datenfeld vorhanden istarray_shift($arr) liefert den Wert des ersten Elements eines Datenfelds und löscht das Ele-
ment dann im Feldarray_pop($arr) gibt den Wert des ersten Elements eines Datenfelds und löscht das Element
dann im Feldarray_sum($arr) summiert die Werte aller Ganz- und Fließkommazahlen aus einem Feldarray_unique($arr) entfernt mehrfache Einträge aus einem Datenfeld
Tabelle 2.11: Weitere nützliche Datenfeldfunktionen
Trang 7Wahrheitswert, der TRUE oder FALSE sein kann Eine Bedingung kann dabei aus
Teilbe-dingungen bestehen, die über logische Operatoren verknüpft werden (Tabelle 2.5)
Die If-then-else-Verzweigung
PHP bietet wie nahezu alle anderen Programmiersprachen auch die if-then-Verzweigung
mit der in Listing 2.22 skizzierten Syntax:
Zunächst werden die Texte Anweisung1 und Anweisung2 ausgegeben Im weiteren
Ver-lauf werden statt der einfachen Textausgaben PHP-Befehle und/oder eigene Funktionenausgeführt In diesem Schritt wird sich jedoch auf die Verzweigung konzentriert Der
Text Anweisung3(Bedingung erfüllt)<br> wird nur dann ausgegeben, wenn die Variable
$bedingung den Wert TRUE hat Wie es bei PHP typisch ist, wird die Ausgabe zum
Inter-netbrowser des Clients weitergegeben, der dann den Zeilenumbruch interpretiert Im
Anschluss daran werden die Ausgaben Anweisung4, Anweisung5 und Anweisung6 tigt War der Wert der Bedingung FALSE, so wird also die Ausgabe Anweisung3 unter-
getä-bunden
Innerhalb der if-Konstruktion – also innerhalb der geschweiften Klammern – können
beliebig viele Befehle platziert werden, die wie gewohnt durch ein Semikolon der getrennt werden Außerdem können weitere Verzweigungen platziert werden Sokönnen Sie erreichen, dass beispielsweise zunächst geprüft wird, ob eine Verbindung zurDatenbank erfolgreich aufgebaut wurde Ist das der Fall, wird das richtige Kennwort ausder Datenbank geholt und mit dem eingegebenen Kennwort verglichen Dieser Vergleich
voneinan-liefert wiederum einen Wahrheitswert Wenn dieser TRUE ist, hat der Anwender Zugang
zum Portal
Für den Fall, dass eine Bedingung FALSE ergibt, können Sie ebenso Anweisungen
plat-zieren, die ausschließlich in diesem Fall ausgeführt werden Eine Skizze dazu sehen Sie
in Listing 2.23:
<?php echo('Anweisung1<br>'); echo('Anweisung2<br>');
if ($bedingung==TRUE){
echo('Anweisung 3(Bedingung erfüllt)<br>');
} echo('Anweisung4<br>'); echo('Anweisung5<br>'); echo('Anweisung6<br>');
?>
Listing 2.22: Skizze einer Wenn-Dann-Verzweigung
<?php echo('Anweisung1<br>'); echo('Anweisung2<br>');
Trang 8Hier wird entweder Anweisung3 ausgegeben, in dem Fall, dass $bedingung erfüllt ist, oder Anweisung4, falls die $bedingung nicht erfüllt ist Ansonsten wird der Quellcode wie
gewohnt linear abgearbeitet
Abbildung 2.6 stellt die beiden bislang vorgestellten Arten der Verzweigung anhand vonProgrammablaufplänen gegenüber und bezieht sich dabei auf die Quellcodes der beidenListings Um den Verlauf eines Programms darzustellen, eignen sich Programmablauf-pläne (PAP) besonders gut Sie sind nach DIN 66001 genormt Die Aktivitätsdiagrammeder UML (Kapitel 3) können als Weiterentwicklung der Programmablaufpläne gesehenwerden
Abbildung 2.6: Die „Wenn-Dann“- (a) und die „Wenn-Dann-Ansonsten“-Verzweigung (b)
Im Folgenden werden einige Szenarien beschrieben, bei denen Verzweigungen im text der HTML-Ausgabe häufig eingesetzt werden Falls Sie bislang noch nicht mit PHPprogrammiert haben, sollten Sie diese kleinen Beispiele nachprogrammieren, selbst ver-ändern und verstehen
else{
echo('Anweisung 4(Bedingung NICHT erfüllt)<br>');
} echo('Anweisung5<br>'); echo('Anweisung6<br>');
?>
Listing 2.23: Skizze einer Wenn-Dann-Ansonsten-Verzweigung (Forts.)
Trang 9Listing 2.24 zeigt bereits eine verschachtelte Verzweigung, bei der eine Variable $wert auf
eine Grenze, im Beispiel 10, geprüft wird Es gibt hier drei Möglichkeiten: Die Grenzekann unterschritten oder überschritten sein Ist beides nicht der Fall, so entspricht der
Wert genau dem Grenzwert In diesem Beispiel wird die Ausgabe über den echo-Befehl
von PHP in den HTML-Ausgabestrom geschrieben:
PHP bietet Ihnen aber auch die Option, den PHP-Quellcode beim Eintreffen einer gung zu unterbrechen und direkt mit der HTML-Ausgabe fortzufahren Damit könnenSie ununterbrochenen HTML-Code schreiben Listing 2.25 zeigt das gleiche Beispiel mit
Bedin-direkter HTML-Ausgabe, indem mit ?>HTML<?php der PHP-Code unterbrochen wird.
Dabei werden auch einige HTML-Befehle in die Ausgabe integriert Welche Art der gabe Sie wählen, liegt an Ihrem eigenen Ermessen und am eigenen Programmierstil:
Aus-<?php $wert=10; ?>
<html><body>
Der Wert ist <?php if($wert<10){
echo(' kleiner als ');
} else{
if($wert>10){
echo(' größer als ');
} else{
echo(' gleich ');
} }
?><h2>Der Wert ist <b>kleiner als</b> 10.</h2><?php }
else{
if($wert>10){
?><h2>Der Wert ist <b>größer als</b> 10.</h2><?php
Listing 2.25: Prüfung eines Werts mit unterbrochenem PHP-Code
Trang 10Im Beispiel des Listings 2.26 wird anhand einer Verzweigung eine Farbe im HTML-Codegesetzt Damit kann ein positiver Wert grün und ein negativer Wert rot dargestellt wer-den Ist der Wert 0, so wird er schwarz hinterlegt Um die Farbe zu setzen, definiert PHPeinen CSS-Stil (Cascading Stylesheets), der dem Wert dann zugewiesen wird Ein solcherCSS-Stil definiert die grafische Darstellung von HTML-Code und besitzt eine Vielzahlvon Gestaltungsmöglichkeiten.
Die Farbe wird in RGB-Anteilen (Rot-Grün-Blau) im hexadezimalen Format angegeben.Die Farbe Rot entspricht dabei „ FF0000“, wobei FF im Hex-Format der Zahl 255 im dezi-malen Format entspricht Da die ersten beiden Stellen der Farbangabe die Rot-Angabedarstellt, wird bei „ FF0000“ der maximale Rot-Anteil gesetzt Die Farbe besitzt wederGrün-, noch Blau-Anteile Somit ergibt sich ein strahlendes Rot als Ausgabe bei einemnegativen Wert:
} else{
?><h2>Der Wert ist <b>gleich</b> 10.</h2><?php }
}
?>
</body></html>
<?php $wert=-5.3;
if($wert<0){
$farbe='#FF0000';
} else{
if($wert>0){
$farbe='#00FF00';
} else{
$farbe='#000000';
} }
Trang 11Achten Sie darauf, dass bei der HTML-Ausgabe das color-Attribut des font-Befehls in
Anführungszeichen gesetzt werden sollte Dort hinein gibt PHP den aktuellen Farbwertaus, bevor die Ausgabe zum Internetbrowser des Clients gesendet wird
In Listing 2.27 ist die resultierende HTML-Ausgabe dargestellt Das Ergebnis ist einegewöhnliche HTML-Datei mit einigen CSS-Angaben
Die elseif-Verzweigung
Oft kommt es vor, dass Sie mehrere Fallunterscheidungen schachteln müssen Die
if-then-else-Konstruktionen sind in diesem Fall unübersichtlich Deshalb existiert eine weitere,
ver-einfachte Struktur, die genau für mehrfache Bedingungen geeignet ist Die
if-elseif-Verzwei-gung wird in Listing 2.28 vorgestellt, indem das Beispiel der Farbauswahl von Listing 2.26umgeschrieben wird Der ausgegebene HTML-Code des Beispiels bleibt identisch Bereits
bei der Verwendung von zwei Bedingungen wirkt der elseif-Befehl kompakter:
Die elseif-Blöcke können mehrfach hintereinander kopiert werden Bei der ersten
zutref-fenden Bedingung wird der Inhalt des entsprechenden Quellcodeblocks abgearbeitet
Nach der Abarbeitung wird der Quellcode hinter der letzten Klammer von if-elseif weiter
bearbeitet
Im Beispiel wurde ausschließlich die Variable $wert für die Formulierung der Bedingung
verwendet In diesem Fall können Sie stattdessen auch die noch kompaktere Darstellung
der switch-Anweisung verwenden, die im nächsten Unterkapitel vorgestellt wird
Über logische Operatoren lassen sich mehrere Variablen zu komplexen Ausdrücken
ver-binden und als Bedingung für die elseif-Blöcke verwenden Im Beispiel des Listings 2.29
if($wert<0){
$farbe='#FF0000';
} elseif($wert>0){
$farbe='#00FF00';
} else{
Trang 12wird eine ungewöhnliche Urlaubsregelung implementiert Dabei bekommen Frauen stetsetwas mehr Urlaub als Männer Zusätzlich gibt es eine Staffelung in drei Altersklassen:
Das Fragezeichen als Verzweigung
Bei vielen Programmiersprachen wie auch in PHP existiert eine weitere
if-then-else-Kon-struktion, die jedoch sehr selten zum Einsatz kommt Listing 2.30 zeigt das Setzen einer
Ausgabe in Abhängigkeit einer Variablen $alter, wobei zwischen „ jung“ und „ alt“ schieden werden soll Das würden Sie bislang mit einer einzigen if-then-else-Verzwei-
unter-<?php $alter=23; $istWeiblich=TRUE;
<html><body><?php echo $urlaubstage?></body></html>
Listing 2.29: Eine Urlaubsregelung mit elseif
Profitipp
Denken Sie bei Bedingungen immer an alle möglichen Fälle Wenn Sie in einer
if-Bedingung auf „ kleiner“ prüfen, fehlt neben „ größer“ noch der Fall „ gleich“ Wennman keinen Gewinn erwirtschaftet, macht man nicht unbedingt Verlust Es kannauch sein, dass das Ergebnis 0 lautet Werden solche Fälle übersehen, erhält man eineSoftware, die in 99.9 % der Fälle korrekt funktioniert, jedoch „ plötzlich“ eine falscheAnnahme macht Sucht man dann die fehlerhafte Verarbeitung, ist das meist sehrzeitaufwendig
Trang 13gung lösen Der Fragezeichenoperator, der auch als Trinitätsoperator bezeichnet wird,bietet eine Lösung in einer einzigen Zeile bei minimalem zusätzlichen Text:
Zunächst muss eine Bedingung formuliert werden, die einen Wahrheitswert zurück gibt
Diese Bedingung wird in Klammern gesetzt Ihr folgt der ?-Operator Die Anweisung
hinter dem Operator wird genau dann ausgeführt, wenn die Bedingung erfüllt ist, der
Wahrheitswert also TRUE ist Ist das Alter also kleiner als 50 Jahre, so wird die sung $ausgabe="jung" ausgeführt Wenn die Bedingung nicht erfüllt ist, so wird die Anweisung ausgeführt, die hinter dem Doppelpunkt steht, also $ausgabe="alt" Der Dop- pelpunkt gehört also zu dem Fragezeichenoperator und trennt das then von dem else.
Zuwei-Die switch-Verzweigung
Die switch-Verzweigung ist nicht so flexibel wie eine elseif-Konstruktion, bietet aber eine
sehr übersichtliche Struktur für eine Fallunterscheidung einer einzelnen Variable an Mit
dem Namen der Variablen beginnt der switch-Block, in dessen Rahmen die
verschiede-nen Fälle (Cases) abgearbeitet werden Die Verarbeitung beginnt bei dem ersten
zutref-fenden case-Block und wird bis zum nächsten break-Kommando abgearbeitet Die beitung kann dadurch über mehrere case-Blöcke verlaufen Abbildung 2.7 zeigt die Arbeitsweise der switch-Verzweigung anhand eines Programmablaufplans.
Verar-<?php $alter=50;
($alter<50) ? $ausgabe="jung" : $ausgabe="alt";
?>
<html><body><?php echo $ausgabe?></body></html>
Listing 2.30: Eine Fallunterscheidung mit Fragezeichen
Meinung
Programmieranfänger halten den Fragezeichenoperator für kryptisch und denerzeugten Quellcode für schlecht lesbar Profis verwenden gerade diesen Operatorjedoch gern, um kompakten Quellcode zu verfassen Überlegen Sie am besten, wer inZukunft Einblick in Ihren Quellcode bekommt Gehen Sie von einem erfahrenenUmfeld von PHP-Entwicklern aus, können Sie den Operator gern verwenden
Trang 14Abbildung 2.7: Die switch-Verzweigung
Im ersten Beispiel erhalten Sie eine Schulnote aus einer Datenbank, die in der Variablen
$note gespeichert wird Sie möchten nun für die Ausgabe den Text der Note ermitteln.
Die Fälle 4 bis 6 wurden ausgelassen Wie Sie sehen, erzeugt die switch-Anweisung sehr
übersichtlichen Quellcode:
<?php $note=2;
Trang 15Ähnlich wie das letzte else in der elseif-Struktur existiert bei dem switch-Block bei Bedarf ein abschließender default-Block Damit können alle Fälle abgefangen werden, die vorher nicht behandelt wurden Ob die Verwendung der switch-Verzweigung übersichtlicher ist als die elseif-Konstruktion, ist Geschmacksache
Die Urlaubsregelung aus Listing 2.29 kann jedenfalls nicht mit einer switch-Verzweigung
gelöst werden, da die Urlaubsregelung Wertebereiche des Alters abfragt, beispielsweise
„ von inklusive 20 Jahren bis 40 Jahren“ Das ist mit einem switch-Befehl nicht möglich Die switch-Verzweigung ist also in ihrer Mächtigkeit beschränkter als eine elseif-Kon-