PHP:A-Z: Unterschied zwischen den Versionen

Aus LT42-Wiki
Zur Navigation springenZur Suche springen
KKeine Bearbeitungszusammenfassung
K :-)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 4: Zeile 4:
  <a name="A"><nowiki><h2>A</h2></nowiki></a>
  <a name="A"><nowiki><h2>A</h2></nowiki></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:
Gelöst mit einer while-Schleife mittels
     <?php
     <?php
     $ascii = "65";
     $ascii = "65";
Zeile 14: Zeile 14:
     ?>
     ?>


== Mal im Einzelnen ==
$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.
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 [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. Aber halt! So wird ja nur die Zahl ausgegeben. Hier kommt uns dann die Funktion
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 ====
zu Gute. Damit wird die jeweilige Zahl in das entsprechende ASCII-Zeichen umgewandelt. (chr steht für character)
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 (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:
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--).


== Ergebnis ==
== Auslassung einiger Buchstaben ==
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:
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 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.
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.
==== 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]]

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.