# Standardfunktionen
Mit einem kurzen Schweifwedeln kann ein Hund mehr Gefühl ausdrücken als mancher Mensch mit stundenlangem Gerede.
– Louis Armstrong, amerik. Jazzmusiker
Wie schon Perl stellt auch PHP eine Menge Funktionen von Haus aus zur Verfügung. Einige dieser Funktionen werden Sie häufig benötigen, andere seltener.
# Zeichenkettenfunktionen
Neben den Möglichkeiten, Zeichenketten in Groß- oder Kleinbuchstaben umzuwandeln, können Sie noch weitere Umwandlungen an Zeichenketten vornehmen, um sie HTML-gerecht ausgeben zu können.
# Groß- und Kleinschreibung
Die Funktion strtoupper
wandelt eine als Parameter übergebene Zeichenkette in Großbuchstaben um. Sie gibt die umgewandelte Zeichenkette als Rückgabewert zurück.
string strtoupper(string string)
Das Gegenteil, die Umwandlung aller Zeichen in Kleinbuchstaben, übernimmt die Funktion strtolower
. Auch sie gibt die umgewandelte Zeichenkette als Rückgabewert zurück.
string strtolower(string string)
Ein Beispiel:
$str = "Zeichenkette, welche auch ä's, ö's und ü's enthält<br>\n";
echo $str;
$str = strtoupper($str);
echo $str;
$str = strtolower($str);
echo $str;
Die Ausgabe im Browser sieht folgendermaßen aus:
Zeichenkette, welche auch ä's, ö's und ü's enthält
ZEICHENKETTE, WELCHE AUCH Ä'S, Ö'S UND Ü'S ENTHÄLT
zeichenkette, welche auch ä's, ö's und ü's enthält
Wie Sie sehen können, haben die Funktionen nur auf Buchstaben Auswirkungen und nicht auf alle Zeichen. Beachten Sie auch immer, dass die originale Zeichenkette nicht verändert wird. Erst wenn Sie den Rückgabewert wieder der als Parameter übergebenen Variablen zuweisen, wird sie verändert.
# Zeichenwerte
Ich bin schon häufiger in diesem Buch auf den Begriff »ASCII-Code« zu sprechen gekommen. Jedes druckbare Zeichen besitzt einen eigenen Code in der so genannten ASCII-Tabelle. Dadurch lässt sich aus einer gegebenen Zahl das entsprechende Zeichen ermitteln – und umgekehrt. In PHP stehen dafür die Funktionen chr
und ord
bereit. Die Funktion chr
ermittelt den ASCII-Code eines Zeichens, und die Funktion ord
ermittelt das Zeichen eines ASCII-Codes.
string chr(int ascii);
int ord(string char)
Ein Beispiel:
$code = ord("ö");
$zeichen = chr(255);
Leider funktioniert dies in Zusammenhang mit einer HTML-Ausgabe nicht korrekt. Die Funktionen sollten also eher verwendet werden, wenn Sie schreibend oder lesend auf eine Datei zugreifen möchten.
# Länge einer Zeichenkette
Die Länge einer Zeichenkette bzw. eines Strings können Sie mit der Funktion strlen
ermitteln. Die Zeichenkette, deren Länge ermittelt werden soll, wird als Parameter übergeben, und die Funktion gibt dann die Anzahl an Zeichen zurück.
int strlen(string string)
Das folgende Beispiel ermittelt die Länge einer Zeichenkette und gibt jedes Zeichen in einer neuen Zeile aus:
$str = "Eine Zeichenkette";
$laenge = strlen($str);
for($i=0; $i<$laenge; $i++)
{
echo "$str[$i]<br>\n";
}
Die Länge der Zeichenkette wird in der for
-Schleife verwendet, um die Abbruchbedingung zu definieren. Zusätzlich kann über einen Index ein bestimmtes Zeichen einer Zeichenkette ausgegeben werden. Dafür muss lediglich die Position des Zeichens in eckigen Klammern notiert werden.
$string[Index]
Beachten Sie, dass die Zählung bei 0 beginnt, das erste Zeichen hat also den Index 0, das zweite den Index 1 usw. Sie können Strings also prinzipiell »ein Array aus mehreren einzelnen Zeichen« nennen.
# Teilzeichenkette suchen
Mit der Funktion strpos
können Sie nach einem Zeichen oder einer Zeichenkette in einer anderen Zeichenkette suchen.
int strpos(string haystack, string needle [, int offset])
Die Zeichenkette, in der gesucht werden soll, ist haystack
(dt. Heuhaufen) und das Zeichen bzw. die Zeichenkette, nach der gesucht werden soll, ist needle
(dt. Nadel). Optional können Sie noch eine Startposition übergeben, ab der gesucht werden soll.
Im folgenden Beispiel wird das Vorkommen aller X
in einer Zeichenkette gezählt.
<?php
$haystack = "AXHXLXFRXNXF";
$xpos = 0;
$xanz = 0;
while(strpos($haystack,"X",$xpos) > -1)
{
$xpos = strpos($haystack,"X",$xpos);
$anz++;
$xpos++;
}
echo $anz;
?>
Listing 5.1: Verwendung von strpos, um zu zählen, wie oft ein bestimmtes Zeichen in einer Zeichenkette vorkommt
In Listing 5.1 wird die Funktion strpos
mit einer optionalen Startposition verwendet. Damit das Vorkommen des ersten X
nicht immer wieder gefunden wird und sich das Programm in einer Endlosschleife verfängt, muss die Position am Ende des Anweisungsblocks der while
-Schleife um 1 inkrementiert werden.
Das Ergebnis aus Listing 5.1 ist übrigens 5.
Alternativ hätten Sie auch die Funktion substr_count
verwenden können. Die Funktion gibt die Häufigkeit des Vorkommens der Teilzeichenkette zurück.
int substr_count(string haystack, string needle)
Für das vorherige Beispiel könnte der neue Quellcode folgendermaßen lauten:
$haystack = "AXHXLXFRXNXF";
$anz = substr_count($haystack,"X");
echo $anz;
# Teilzeichenkette auslesen
Mit der Funktion substr
können Sie einen Teil einer Zeichenkette auslesen. Als Parameter müssen dabei die Quellzeichenkette, die Startposition und optional die Länge der auszulesenden Teilzeichenkette übergeben werden.
string substr(string string, int start [, int length])
Wenn Sie keine Länge angeben, wird eine Zeichenkette zurückgegeben, die dem Teil der Zeichenkette von der Startposition bis zum Ende der Quellzeichenkette entspricht.
$str = "1234567890";
$teil1 = substr($str,5);
echo $teil1;
$teil2 = substr($str,3,4);
echo $teil2;
Die Ausgabe dieses Beispiels lautet:
67890
4567
# Teilzeichenkette ersetzen
Mit der Funktion substr_replace
können Sie eine Teilzeichenkette durch eine andere ersetzen.
string substr_replace(string string, string replacement, int start [, int length])
Als erster Parameter wird die Quellzeichenkette angegeben und als zweiter Parameter die Zeichenkette, die eingesetzt werden soll. Welche Zeichenkette ersetzt wird, hängt vom dritten und vierten Parameter ab. Geben Sie nur die Startposition an, wird eine Zeichenkette von der angegebenen Startposition bis zum Ende der Zeichenkette ersetzt; bei Angabe des vierten optionalen Parameters wird nur die tatsächlich angegebene Anzahl an Zeichen ersetzt.
Als Rückgabewert liefert die Funktion die veränderte Zeichenkette.
$str = "Eine Zeichenkette";
echo substr_replace($str," String",3);
Die Ausgabe lautet:
Ein String
Mit Angabe einer Länge sieht die Funktion so aus:
$str = "Eine Zeichenkette";
echo substr_replace($str,"Diese",0,4);
Die Ausgabe lautet:
Diese Zeichenkette
# Zeichenkette verschlüsseln
Die Funktion crypt
aus Perl existiert auch in PHP. Die Funktion erwartet einen, optional zwei Parameter.
string crypt(string soup, string salt)
Diese Funktion wird häufig verwendet, um einen Benutzernamen und ein Passwort zu verschlüsseln.
$soup = "benutzer";
$salt = "passwort";
$crypted = crypt($soup,$salt);
echo $crypted;
Die Ausgabe lautet:
paZ9xsy2hvUlw
Bei der Verschlüsselung sind jedoch noch ein paar Dinge zu beachten. Standardmäßig wird die Methode DES zum Verschlüsseln der Strings benutzt. Da verschiedene Betriebssysteme unterschiedliche und auch mehrere Verschlüsselungsverfahren anbieten, kann es vorkommen, dass die MD5-Verschlüsselung verwendet wird. Wichtig ist dies, wenn Sie den Parameter salt
nicht übergeben. PHP wählt dann die standardmäßig eingestellte Verschlüsselung und erzeugt einen entsprechenden Zufallsschlüssel zum Kodieren.
Der verschlüsselte String kann im Übrigen nicht entschlüsselt werden, da sowohl DES als auch MD5 Einweg-Verschlüsselungen sind.
# Array-Funktionen
Bei der Verwendung von Arrays gibt es einige Funktionen, die äußerst hilfreich sein können.
# Größe eines Arrays
Mit der Funktion count
können Sie die Elemente eines Arrays zählen. Als Parameter erwartet die Funktion ein Array und liefert die Anzahl der Elemente zurück.
int count(mixed var)
Zwar können Sie diese Funktion auch auf andere Variablentypen anwenden, da diese aber immer nur ein Element enthalten, wird immer 1 zurückgegeben – außer bei NULL
, dort lautet der Rückgabewert 0.
$arr = Array(1,2,3,4,5,6,7,8,9,0);
echo count($arr);
Dieses Beispiel gibt im Browser 10 aus, da $arr
10 Elemente enthält.
Alternativ können Sie auch die Funktion sizeof
verwenden. Sie ist aber lediglich ein Alias für count
. Gedacht ist sie für Umsteiger von anderen Sprachen, wie etwa C++.
# Arrays sortieren
Die Funktion sort
sortiert die Elemente eines Arrays entweder nach der Standardmethode oder nach der Methode, die Sie angegeben haben.
void sort(array array[, int sort_flag])2
Für sort_flag
können Sie einen der folgenden Werte einsetzen:
SORT_REGULAR
– normale Sortierung (Standard)SORT_NUMERIC
– numerische SortierungSORT_STRING
– alphanumerische Sortierung
Das folgende Beispiel sortiert ein Array nach allen drei Methoden und gibt das jeweilige Ergebnis aus.
<?php
$arr = Array(123,"Zehn",56,"55bcd","@");
sort($arr); // Methode = SORT_REGULAR
echo "<h3>Normal</h3>";
foreach($arr as $value)
{
echo "$value<br>\n";
}
sort($arr, SORT_NUMERIC);
echo "<h3>Numerisch</h3>";
foreach($arr as $value)
{
echo "$value<br>\n";
}
sort($arr, SORT_STRING);
echo "<h3>Alphanumerisch</h3>";
foreach($arr as $value)
{
echo "$value<br>\n";
}
?>
Listing 5.2: Verschiedene Sortiermethoden für Arrays
Das Listing 5.2 erzeugt nun folgende Ausgabe:
Normal
55bcd
@
Zehn
56
123
Numerisch
@
Zehn
55bcd
56
123
Alphanumerisch
123
55bcd
56
@
Zehn
Wie Sie sehen können, unterscheiden sich die Sortiermethoden sehr stark voneinander, beispielsweise sortiert die numerische Methode Zahlen nach ihrem Wert und nicht nach der Schreibweise, wohingegen die alphanumerische Methode entsprechend dem Zeichen sortiert.
Um eine absteigende Sortierreihenfolge zu erhalten, müssen Sie stattdessen die Funktion rsort
verwenden. Die Syntax entspricht dabei derjenigen von sort
.
# Array mit Wertebereich
Manchmal ist es hilfreich, ein Array mit den Buchstaben von a bis z oder mit Zahlen von 0 bis 255 zu haben. Während dies in Perl einfach mit zwei Punkten zu realisieren ist, müssen Sie in PHP die Funktion range
verwenden.
array range(mixed start, mixed end)
Einige Beispiele:
$ascii = range(0,255);
// Array mit 256 Elementen, Werte von 0 bis 255
$klein = range('a','z');
// Array mit 26 Elementen, Kleinbuchstaben von a bis z
$rklein = range('z','a');
// Array mit 26 Elementen, Kleinbuchstaben von z bis a
Sie können range
aber auch direkt in einer foreach
-Schleife anwenden:
foreach(range('a','f') as $char)
{
echo "$char<br>\n";
}
Die Ausgabe lautet:
a
b
c
d
e
f
# Element am Ende hinzufügen oder löschen
Bei der Verwendung von Arrays ist häufig das Hinzufügen von Elementen nötig. Die einfachste Methode, um ein Element an ein Array anzuhängen, wäre:
$arr[] = "Neues Element";
Wenn Sie nun aber mehrere Elemente hinzufügen möchten, z. B. zwei Arrays zusammenführen, müssen Sie eine Schleife verwenden, die über die Elemente des hinzuzufügenden Arrays traversiert und sie dem anderen Array dann nacheinander anhängt.
Einfacher und eleganter ist die Verwendung der Funktion array_push
und array_pop
. Mit diesen beiden Funktionen können Sie ein oder mehrere Elemente am Ende eines Arrays hinzufügen oder löschen. Das Hinzufügen ermöglicht die Funktion array_push
, die als ersten Parameter das Zielarray erwartet und anschließend die neuen Elemente entweder einzeln oder als Array. Der Rückgabewert enthält die neue Anzahl von Elementen des Arrays.
int array_push(array destination, mixed var [,mixed ...])
Die Funktion array_pop
liefert immer das letzte Element eines Arrays zurück und löscht dieses. Wenn das Array keine Elemente mehr enthält, gibt array_pop
NULL
zurück.
mixed array_pop(array source)
Das folgende Beispiel arbeitet sowohl mit der Funktion array_push
als auch mit array_pop
.
$staedte = Array("Berlin","Madrid","Hamburg");
array_push($staedte,"Mailand","Paris");
while($stadt = array_pop($staedte))
{
echo "$stadt<br>\n";
}
Zu Beginn wird ein Array namens $staedte
definiert, das drei Elemente enthält. Anschließend werden zwei weitere Elemente hinzugefügt. In der while
-Schleife wird so lange die Funktion array_pop
ausgeführt, bis das Array $staedte
keine Elemente mehr enthält.
# Elemente am Anfang hinzufügen oder löschen
Die beiden Funktionen array_shift
und array_unshift
ermöglichen das Hinzufügen oder Löschen eines Elements am Anfang eines Arrays.
Die Funktion array_unshift
fügt ein oder mehrere Elemente am Anfang des Arrays hinzu. Die Reihenfolge, in der die Elemente an die Funktion übergeben wurden, entspricht auch der Reihenfolge, in der sie dem Array hinzugefügt wurden. Die Indizes werden entsprechend angepasst, so dass das erste Element den Index 0, das zweite den Index 1 usw. erhält. Als Rückgabewert erhalten Sie die neue Anzahl von Elementen des Arrays.
int array_unshift(array array, mixed var [,mixed ...])
Die Funktion array_shift
hingegen liefert das erste Element eines Arrays zurück und löscht es anschließend. Die Indizes werden dabei auch wieder so angepasst, dass die Zählung mit 0 beginnt. Enthält das Array keine Elemente mehr, lautet der Rückgabewert NULL
.
$staedte = Array("Berlin","Madrid","Hamburg");
array_unshift($staedte,"Mailand","Paris");
while($stadt = array_shift($staedte))
{
echo "$stadt<br>\n";
}
Vom vorherigen Beispiel unterscheidet sich dieses kaum. Lediglich die Funktionen, um das Array $staedte
zu manipulieren, sind unterschiedlich. Es gibt jedoch einen Unterschied in der Ausgabe. Während das Beispiel aus Abschnitt 43.2.4 die Elemente von hinten ausgibt, liefert dieses Beispiel die Elemente von vorn.
# Array durchsuchen
Um ein Array auf die gleiche Weise durchsuchen zu können wie Strings mit der Funktion strpos
, müssen Sie die Funktion array_search
verwenden.
mixed array_search(mixed needle, array haystack)
Als needle
müssen Sie den Wert notieren, nach dem gesucht werden soll, und als haystack
das Array, das durchsucht werden soll. Wurde der Wert gefunden, gibt die Funktion den Index zurück, andernfalls lautet das Ergebnis FALSE
.
$staedte = Array("Berlin","Madrid","Hamburg");
$ergebnis = array_search("erl",$staedte);
echo $staedte[$ergebnis];
Dieses Beispiel gibt im Browser Berlin
aus.
# Schlüssel und Werte
Mit den beiden Sprachkonstrukten each
und list
können Sie die Elemente eines Arrays in Schlüssel und Wert unterteilen und einzelnen Variablen zuweisen. Beide Sprachkonstrukte stammen noch aus den Zeiten von PHP 3, existieren aber in PHP 4 noch immer und parallel zur foreach
-Schleife.
Das Konstrukt each
unterteilt ein Element eines Arrays in Schlüssel und Wert. Das Ergebnis dieses Konstrukts ist wiederum ein Array mit zwei Elementen. Die Konstrukt list
weist die einzelnen Elemente eines Arrays Variablen zu.
$hauptstaedte = Array(Deutschland=>"Berlin",
Spanien=>"Madrid",
Frankreich=>"Paris");
$hauptstadt = each($hauptstaedte);
echo $hauptstadt[0];
echo $hauptstadt[1];
Die Ausgabe dieses Beispiels würde Deutschland
Berlin
lauten. Da each
jedoch immer das nächste Element zurückgibt, ist das Konstrukt geradezu dafür prädestiniert, in einer Schleife verwendet zu werden.
list($land, $stadt) = each($hauptstaedte);
Hier werden die einzelnen Elemente des durch each
extrahierten Arrays an die Variablen $land
und $stadt
verteilt.
$hauptstaedte = Array(Deutschland=>"Berlin",
Spanien=>"Madrid",
Frankreich=>"Paris");
while(list($land, $stadt) = each($hauptstaedte))
{
echo "$land => $stadt<br>\n";
}
Dieses Beispiel entspricht dem Wesen nach dem Folgenden:
$hauptstaedte = Array(Deutschland=>"Berlin",
Spanien=>"Madrid",
Frankreich=>"Paris");
foreach($hauptstaedte as $land=>$stadt)
{
echo "$land => $stadt<br>\n";
}
# Datums- und Zeitfunktionen
Aufgrund der Abstammung von PHP werden Ihnen die nachfolgenden Funktionen sicherlich bekannt vorkommen.
# Der aktuelle Zeitpunkt
Auch in PHP werden Datums- und Zeitangaben im UNIX-Format vorgenommen, d. h., beim Aufruf der Funktion time
erhalten Sie die seit dem 1.1.1970 verstrichene Anzahl von Sekunden. Im Übrigen liefert time
den jetzigen aktuellen Zeitpunkt.
int time(void)
Da mit einer solchen Angabe in Sekunden meist sehr wenig anzufangen ist, wird die Funktion localtime
verwendet, um den UNIX-Zeitstempel umzuwandeln;
array localtime(int timestamp [,bool associative])
Der erste Parameter timestamp
ist der UNIX-Zeitstempel, den die Funktion erwartet. Der Parameter associative
hingegen bestimmt, ob das Ergebnis ein assoziatives Array ist. Notieren Sie entweder TRUE
, wenn Sie ein assoziatives Array brauchen, oder FALSE
, wenn Sie ein numerisches Array erhalten möchten.
$now = localtime(time(),TRUE);
echo $now['tm_mday'];
Die einzelnen assoziativen Indizes im Überblick:
Index | Erklärung |
---|---|
tm_sec | Sekunden |
tm_min | Minuten |
tm_hour | Stunde |
tm_mday | Tag des Monats |
tm_mon | Monat |
tm_year | Jahr |
tm_wday | Tag der Woche |
tm_yday | Tag des Jahres |
tm_isdst | Ist das Datum in Sommerzeit? |
Tabelle 5.1: Schlüssel des aus dem Aufruf von localtime resultierenden Arrays
Wie üblich gilt es bei den Werten jedoch ein paar kleinere Hindernisse aus dem Weg zu räumen. Die Monatszahl aus tm_mon
ist eine Zahl zwischen 0 und 11, wobei 0 dem Januar und 11 dem Dezember entspricht. Das Jahr hingegen ist eine zweistellige Zahl. So entspricht das Jahr 1999 der Zahl 99 und das Jahr 2002 der Zahl 102. Sie müssen zu diesem Wert also immer 1900 hinzuaddieren, um die korrekte Jahreszahl zu erhalten. Bei dem Tag der Woche verhält es sich wie bei dem Monat, auch hier beginnt die Zählung bei 0, wobei 0 dem Sonntag, 1 dem Monat und 6 dem Samstag entspricht.
<?php
$monate = Array("Januar","Februar","M�rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
$wochentage = Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$jetzt = localtime(time(),TRUE);
$jetzt['tm_year'] += 1900;
$monat = $jetzt['tm_mon'];
$wochentag = $jetzt['tm_wday'];
echo "$wochentage[$wochentag], der $jetzt[tm_mday]. $monate[$monat] $jetzt[tm_year]<br>";
?>
Listing 5.3: Ausgabe des Datums mit der Funktion localtime
Auch die Uhrzeit muss ein wenig umgestaltet werden, damit bei Werten kleiner als 10 bei den Stunden, Minuten und Sekunden eine führende 0 dargestellt wird.
$stunde = ($jetzt[tm_hour]<10) ? "0".$jetzt[tm_hour] :
$jetzt[tm_hour];
$minuten = ($jetzt[tm_min]<10) ? "0".$jetzt[tm_min] : $jetzt[tm_min];
$sekunden = ($jetzt[tm_sec]<10) ? "0".$jetzt[tm_sec] :
$jetzt[tm_sec];
echo "$stunde:$minuten:$sekunden";
# Ausgabe formatieren
Einfacher ist die Verwendung der Funktion strftime
. Diese Funktion erwartet zwei Parameter: als ersten den String, der die Ausgabeformatierung enthält, und als optionalen zweiten Parameter einen UNIX-Zeitstempel. Wenn Sie den Zeitstempel nicht angeben, verwendet die Funktion den Zeitstempel, der dem aktuellen Zeitpunkt entspricht.
string strftime(string format [, int timestamp])
Die Tabelle 5.2 enthält alle Platzhalter, die zur Formatierung der Ausgabe verwendet werden können. Einige von diesen Platzhaltern könnten in Windows-Umgebungen jedoch nicht bekannt sein.
Platzhalter | Erklärung |
---|---|
%a | Abgekürzter Name des Wochentags |
%A | Ausgeschriebener Name des Wochentags |
%b | Abgekürzter Name des Monats |
%B | Ausgeschriebener Name des Monats |
%c | Bevorzugte Datums- und Zeitangabe |
%C | Jahrhundert (0099) |
%d | Tag des Monats als Zahl |
%H | Stunde als Zahl im 24-Stunden-Format von 00 bis 23 |
%I | Stunde als Zahl im 12-Stunden-Format von 01 bis 12 |
%j | Tag des Jahres als Zahl von 001 bis 366 |
%m | Monat als Zahl von 01 bis 12 |
%M | Minute als Dezimalwert von 00 bis 59 |
%n | Neue Zeile |
%p | Entweder am oder pm bei Verwendung des 12-Stunden-Formats |
%S | Sekunden als Dezimalwert von 00 bis 59 |
%t | Tabulator |
%u | Tag der Woche als Zahl |
%V | Kalenderwoche als Zahl von 01 bis 53 |
%y | Zweistellige Jahreszahl von 00 bis 99 |
%Y | Vierstellige Jahreszahl |
%Z | Zeitzone, Name oder Abkürzung |
%% | Prozentzeichen |
Tabelle 5.2: Platzhalter für die Formatierung des Datums und der Zeit mit strftime
Ein paar Beispiele für die Verwendung von Platzhaltern:
echo strftime("%A, der %d. %B %Y");
echo strftime("%d.%m.%Y / %H:%M:%S");
echo strftime("Wir schreiben das %C. Jahrhundert");
# Datum umwandeln
Die Funktion mktime
ermöglicht die Umwandlung eines Datums in einen UNIX-Zeitstempel. Die Werte werden jedoch einzeln an die Funktion übergeben.
int mktime(int hour, int minute, int second, int month, int day, int year)
Der Rückgabewert dieser Funktion ist dann der UNIX-Zeitstempel. Die Umwandlung des Datums 5.11.1980 um 02:00:05 Uhr würde dann folgendermaßen aussehen:
$unixtime = mktime(2,0,5,11,5,1980);
echo strftime("Der %d.%m.%Y war ein %A",$unixtime);
Die Ausgabe lautet:
Der 05.11.1980 war ein Mittwoch
# Mathematische Funktionen
Berechnungen werden nicht so häufig verwendet wie die zuvor dargestellten Funktionen, werden aber doch gelegentlich benötigt, etwa für einen Zufallsgenerator oder Ähnliches.
# Zufallsgenerator
Der Zufallsgenerator in PHP funktioniert ähnlich wie in Perl, und auch die Namen der Funktionen entsprechen sich. Die Initialisierung des Zufallsgenerators mit der Funktion srand
wird auch in Perl vorgenommen.
void srand(int seed)
Da die Initialisierung des Zufallsgenerators mit immer der gleichen Zahl die gleiche Zufallszahlensequenz erzeugt, sollten Sie als Parameter an die Funktion srand
den aktuellen Zeitpunkt übergeben, z. B. mit:
srand((double)microtime()*time());
Die Zufallszahlen selbst erzeugen Sie mit Hilfe der Funktion rand
:
int rand([int min [, int max]])
Die Angabe eines Wertebereichs ist optional. Mit ihm lässt sich aber festlegen, aus welchem Zahlenbereich eine Zufallszahl erzeugt werden darf. Wird nur das Minimum angegeben, erhalten Sie eine Zahl zwischen dem angegebenen Minimum und einer maximalen Zahl, die vom Betriebssystem abhängt. Geben Sie keinen Parameter an, liegt die Zahl zwischen 0 und dem Maximum, abhängig von der Betriebssystemumgebung.
Intern arbeitet rand
mit einem Algorithmus, der eine Pseudozufallszahl erzeugt. Das folgende Beispiel soll dies verdeutlichen.
srand(100);
$zahl1 = rand();
$zahl2 = rand();
srand(100);
$zahl3 = rand();
$zahl4 = rand();
echo "Erste Sequenz: $zahl1 / $zahl2<br>\n";
echo "Zweite Sequenz: $zahl3 / $zahl4<br>\n";
Dieses Beispiel erzeugt Die Ausgabe lautet:
Erste Sequenz: 21197 / 26498
Zweite Sequenz: 21197 / 26498
Wie Sie erkennen können, entspricht der Wert von $zahl1
dem Wert von $zahl3
und derjenige von $zahl2
dem Wert von $zahl4
. Bei Verwendung des gleichen Initialisierungswerts für srand
erhalten Sie also immer die gleiche Zufallszahlensequenz.
Anders ist dies bei Verwendung des aktuellen Zeitpunkts als Initialisierungswert:
srand((double) microtime()*time());
Die Funktion microtime
gibt die Mikrosekunden zum UNIX-Zeitstempel als String zurück, weshalb auch die explizite Umwandlung mittels double
erfolgt. Anschließend wird die Zahl mit dem Rückgabewert von time
multipliziert, was zu einem garantiert unterschiedlichen Initialisierungswert selbst in kurzen Scripts führt.
srand((double)microtime()*time());
$zahl1 = rand();
$zahl2 = rand();
srand((double)microtime()*time());
$zahl3 = rand();
$zahl4 = rand();
echo "Erste Sequenz: $zahl1 / $zahl2<br>\n";
echo "Zweite Sequenz: $zahl3 / $zahl4<br>\n";
Die Browserausgabe könnte folgendermaßen aussehen:
Erste Sequenz: 18680 / 20945
Zweite Sequenz: 21268 / 10173
Wie Sie sehen können, sind dies nun vier unterschiedliche Werte.
# Zahlensysteme
Um Zahlen aus dem Dezimal- in das Oktalsystem oder von Hexadezimal nach Binär umzuwandeln, können Sie die Funktion base_convert
verwenden.
string base_convert(string number, int frombase, int tobase)
Der Parameter number
ist die zu konvertierende Zahl. Der Parameter frombase
entspricht dem ursprünglichen System, und tobase
entspricht dem System, in das konvertiert werden soll. Die Basis für das Binärsystem lautet 2, für das Oktalsystem 8, für das Dezimalsystem 10 und für das Hexadezimalsystem 16.
echo base_convert("FF",16,10);
echo base_convert("8",10,2);
$i = 255;
echo base_convert((string)$i,10,16);
Die Ausgabe lautet:
255
1000
ff
# Sinus und Kosinus
Zum Errechnen des Sinus oder Kosinus eines Wertes müssen Sie lediglich die Zahl als Parameter übergeben, von der Sie den Sinus oder Kosinus errechnen möchten.
echo sin(90); // Sinus von 90
echo cos(0); // Kosinus von 0
# Zusammenfassung
- PHP stellt für Zeichenketten die unterschiedlichsten Umwandlungsfunktionen bereit.
- Ebenso existieren zahlreiche Funktionen zur Manipulation und Operation mit Arrays.
# Fragen und Übungen
- Was bewirken die Funktionen
strtoupper
undstrtolower
? - Wie können Sie die Länge einer Zeichenkette bzw. eines Strings ermitteln?
- Schreiben Sie ein Script, das in einer beliebigen Zeichenkette alle ä, ö, ü, Ä, Ö, Ü, ß und & durch die entsprechenden Entities ersetzt.
- Wie können Sie die Größe eines Arrays ermitteln?
- Welche beiden Funktionen löschen ein Element eines Arrays und geben dieses zurück?
- Welche beiden Funktionen fügen ein Element einem Array hinzu?
- Welche Alternative gibt es für die Verwendung der
foreach
-Schleife? - Schreiben Sie ein Script, das einen Lottozahlengenerator darstellt. Beachten Sie, dass die Zahlen in einem Bereich von 1 bis 49 liegen müssen!