PHP:A-Z

Aus LT42-Wiki
Zur Navigation springen Zur Suche springen

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.