PHP:A-Z

Aus LT42-Wiki
Version vom 1. September 2012, 12:19 Uhr von Lukas (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== 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 de…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur 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>

So zieht sich das dann durch das gesamte Dokument. Ich habe also gedacht, dass ich das mit einer while-Schleife lösen könnte. Tat ich dann auch:

   <?php
   $ascii = "65";
   $ende = "90";
   while ($ascii <= $ende) { 
   echo "<a href=\"#" . chr($ascii) . "\">" . chr($ascii) . "</a> ";
   $ascii++;
   }
   ?>

Mal im Einzelnen

Mit dem Tag

<?php

und

?>

öffne und schließe ich den PHP-Tag.

Definition

Dann geht es weiter mit der Definition der Variablen $ascii und $ende. Diese sollen später den Anfang und das Ende der while-Schleife festlegen. 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. Aber halt! So wird ja nur die Zahl ausgegeben. Hier kommt uns dann die Funktion

chr

zu Gute. 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 (und das sollten wir auch nicht, da es sich dann um eine Endlosschleife handelte und der Server (oder nur Apache) dann möglicherweise abstürzt), 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--).

Ergebnis

Das Ergebnis sieht dann mit ein bisschen CSS-Ergänzungen so aus:

Datei:A-z.png

Mögliche Ergänzungen

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 gecheckt, 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.

Ergebnis

Hier sieht man das Ergebnis. Die Buchstaben J (=74) und N (=78) sind ausgegraut (also mit der Klasse "nicht" versehen).

Datei:Nicht-a-z.png