PHP:A-Z: Unterschied zwischen den Versionen
Lukas (Diskussion | Beiträge) K →++ |
Lukas (Diskussion | Beiträge) K :-) |
||
Zeile 4: | Zeile 4: | ||
<a name="A"><nowiki><h2>A</h2></nowiki></a> | <a name="A"><nowiki><h2>A</h2></nowiki></a> | ||
Gelöst mit einer while-Schleife mittels | |||
<?php | <?php | ||
$ascii = "65"; | $ascii = "65"; | ||
Zeile 14: | Zeile 14: | ||
?> | ?> | ||
$ascii und $ende bilden ersten und letzten Buchstaben. Hierbei stehen die beiden Zahlen für Buchstaben in der [http://de.wikipedia.org/wiki/ASCII#ASCII-Tabelle ASCII-Tabelle], wobei 65 für A und 90 für Z steht. | |||
Hierbei stehen die beiden Zahlen für Buchstaben in der [http://de.wikipedia.org/wiki/ASCII#ASCII-Tabelle ASCII-Tabelle], wobei 65 für A und 90 für Z steht. | |||
=== while === | === while === | ||
Zeile 34: | Zeile 25: | ||
=== echo === | === echo === | ||
Bei jedem Durchlauf wird ein Link ausgegeben. Dieser Link leitet dann auf den Link des jeweiligen Buchstabens. Bei HTML kann man Links mit dem Attribute "name" benennen und über ein #LINK-NAME hinter der URL auf den jeweiligen Link leiten. Also gibt der echo-Befehl bei jedem Durchlauf einen Link mit dem Link-Namen $ascii aus. | Bei jedem Durchlauf wird ein Link ausgegeben. Dieser Link leitet dann auf den Link des jeweiligen Buchstabens. Bei HTML kann man Links mit dem Attribute "name" benennen und über ein #LINK-NAME hinter der URL auf den jeweiligen Link leiten. Also gibt der echo-Befehl bei jedem Durchlauf einen Link mit dem Link-Namen $ascii aus. So wird allerdings nur die Zahl ausgegeben. Hier kommt dann die Funktion | ||
==== chr ==== | ==== chr ==== | ||
ins Spiel. Damit wird die jeweilige Zahl in das entsprechende ASCII-Zeichen umgewandelt. (chr steht für character) | |||
Also schreibt man für die Ausgabe der Variable $ascii als Buchstaben: | Also schreibt man für die Ausgabe der Variable $ascii als Buchstaben: | ||
Zeile 43: | Zeile 34: | ||
=== ++ === | === ++ === | ||
Damit wir nicht ewig lang immer den Buchstaben A ausgeben | Damit wir nicht ewig lang immer den Buchstaben A ausgeben, wird am Ende eines jeden Durchlaufs noch die Variable $ascii um einen erhöht. Hierfür schreiben wir einfach ein ++ hinter die Variable. Also: | ||
$ascii++; | $ascii++; | ||
Man könnte das Alphabet auch rückwärts laufen lassen, in dem man die Variablen vertauscht (also $ascii = "90" und $ende = "65") und $ascii dann mit jedem Durchlauf verringert ($ascii--). | Man könnte das Alphabet auch rückwärts laufen lassen, in dem man die Variablen vertauscht (also $ascii = "90" und $ende = "65") und $ascii dann mit jedem Durchlauf verringert ($ascii--). | ||
== Auslassung einiger Buchstaben == | |||
Wenn man nicht das volle Alphabet ausgegben haben möchte, kann man mit Hilfe einer if-Bedingung die Ausgabe eingrenzen. Hier kann man das folgende verwenden: | Wenn man nicht das volle Alphabet ausgegben haben möchte, kann man mit Hilfe einer if-Bedingung die Ausgabe eingrenzen. Hier kann man das folgende verwenden: | ||
<?php | <?php | ||
Zeile 69: | Zeile 54: | ||
} | } | ||
?> | ?> | ||
Hier ist die Grundstruktur die gleiche. Allerdings wird vor der Ausgabe der Buchstaben | Hier ist die Grundstruktur die gleiche. Allerdings wird vor der Ausgabe der Buchstaben geprüft, ob sie ausgegeben werden sollen. Hierfür verwenden wir eine if-Bedindung. Wenn die Variable $ascii 74 (=J) oder 78 (=N) ist, wird der Buchstabe als ein Link mit der Klasse "nicht" und ohne Verweis ausgegeben. Per CSS kann man dann den Link zum Beispiel ausgrauen. | ||
Falls aber die Variable nicht 74 und nicht 78 ist, kommt die else-Variante in Gebrauch. Hier wird der Link dann, wie vorher ausgegeben. | Falls aber die Variable nicht 74 und nicht 78 ist, kommt die else-Variante in Gebrauch. Hier wird der Link dann, wie vorher ausgegeben. | ||
Aktuelle Version vom 23. Juli 2018, 20:49 Uhr
Problem-Beschreibung
Neulich hatte ich das Problem auf einer Webseite eine A-Z-Link-Liste zu bauen. Nun wollte ich das nicht alles mit HTML machen. In dem Dokument sind die Buchstaben A-Z jeweils so als Überschrift-Link angegeben:
<a name="A"><h2>A</h2></a>
Gelöst mit einer while-Schleife mittels
<?php $ascii = "65"; $ende = "90"; while ($ascii <= $ende) { echo "<a href=\"#" . chr($ascii) . "\">" . chr($ascii) . "</a> "; $ascii++; } ?>
$ascii und $ende bilden ersten und letzten Buchstaben. Hierbei stehen die beiden Zahlen für Buchstaben in der ASCII-Tabelle, wobei 65 für A und 90 für Z steht.
while
Nun geht es los mit der while-Schleife. Diese wird ausgeführt, wenn $ascii kleiner oder gleich $ende ist. Da die Variable $ascii bei jedem Schleifen-Durchlauf um einen erhöht wird (dazu mehr weiter unten), ist $ascii irgendwann so groß, wie $ende und bildet dadurch das Ende der Schleife. Würde man hier nur
while($ascii < $ende)
schreiben, würde das Alphabet nach Y aufhören. Man könnte zwar $ende auf 91 setzen, aber die Lösung mit
while($ascii <= $ende)
ist da meiner Meinung nach schöner.
echo
Bei jedem Durchlauf wird ein Link ausgegeben. Dieser Link leitet dann auf den Link des jeweiligen Buchstabens. Bei HTML kann man Links mit dem Attribute "name" benennen und über ein #LINK-NAME hinter der URL auf den jeweiligen Link leiten. Also gibt der echo-Befehl bei jedem Durchlauf einen Link mit dem Link-Namen $ascii aus. So wird allerdings nur die Zahl ausgegeben. Hier kommt dann die Funktion
chr
ins Spiel. Damit wird die jeweilige Zahl in das entsprechende ASCII-Zeichen umgewandelt. (chr steht für character)
Also schreibt man für die Ausgabe der Variable $ascii als Buchstaben:
chr($ascii)
++
Damit wir nicht ewig lang immer den Buchstaben A ausgeben, wird am Ende eines jeden Durchlaufs noch die Variable $ascii um einen erhöht. Hierfür schreiben wir einfach ein ++ hinter die Variable. Also:
$ascii++;
Man könnte das Alphabet auch rückwärts laufen lassen, in dem man die Variablen vertauscht (also $ascii = "90" und $ende = "65") und $ascii dann mit jedem Durchlauf verringert ($ascii--).
Auslassung einiger Buchstaben
Wenn man nicht das volle Alphabet ausgegben haben möchte, kann man mit Hilfe einer if-Bedingung die Ausgabe eingrenzen. Hier kann man das folgende verwenden:
<?php $ascii = "65"; $ende = "90"; while ($ascii <= $ende) { if ($ascii=="74" or $ascii=="78") { echo "<a class=\"nicht\">" . chr($ascii) . "</a> "; } else { echo "<a href=\"#" . chr($ascii) . "\">" . chr($ascii) . "</a> "; } $ascii++; } ?>
Hier ist die Grundstruktur die gleiche. Allerdings wird vor der Ausgabe der Buchstaben geprüft, ob sie ausgegeben werden sollen. Hierfür verwenden wir eine if-Bedindung. Wenn die Variable $ascii 74 (=J) oder 78 (=N) ist, wird der Buchstabe als ein Link mit der Klasse "nicht" und ohne Verweis ausgegeben. Per CSS kann man dann den Link zum Beispiel ausgrauen.
Falls aber die Variable nicht 74 und nicht 78 ist, kommt die else-Variante in Gebrauch. Hier wird der Link dann, wie vorher ausgegeben.