echo $begrüßung;
bin gerade dabei PHP zu lernen und habe aus einem Buch "Programmieren lernen in PHP5" folgendes Script zum erstellen eines Verzeichnisses:
Ist ja soweit auch recht schön,
Nö.
define("DELIMITER", " ");
function fillin($w, $n)
Wenn dir das Buch beigebracht hat, unkommentierten Code mit nicht intuitiven Variablennamen zu schreiben, solltest du dich vielleicht nach einem anderen umsehen. Es ist aufwendig, sich in solchen Code einzuarbeiten, dessen Sinn zu verstehen und dann immer noch nicht zu wissen, ob er gemäß der Intention des Autors arbeitet, wenn diese nicht dabei steht. Beschreibe aber nicht das was da steht sondern was du damit bezweckst, den Sinn dahinter. Du wirst dir später selber danken, wenn du das konsequent machst. Wenn nicht, wirst du dich sicher wie so viele erst später ärgern, dass sie aus ihren Fehlern lernen müssen.
$word=strtoupper(substr($word, 0, 1));
Es ist keine gute Idee, eine Variable sinnentstellend wiederzuverwenden. Du hast nun kein Wort mehr in $word stehen, sondern nur noch einen Anfangsbuchstaben von einem.
Wie kann ich das unterdrücken, daß der Delimiter schon vor dem ersten Element geschrieben wird.
Du könntest zunächst die einzelnen Buchstaben-Daten jeweils in einem Element eines Arrays abzulegen. Dieses kannst du dann mit implode() zu einem String umwandeln lassen. Der Parameter glue wird dabei nur zwischen die Elemente einfügt.
Last but not least soll das Verzeichnis natürlich noch auf etwas verweisen, das habe ich wie folgt geschrieben:
[...]
Funktioniert auch,
Es funktioniert immer alles irgendwie. Die Frage ist nur, ob es zu deiner Intention passt. Die müsstest du den Lesern mitteilen, denn deine Gedanken kann k(aum)einer erraten.
aber wollte wissen, ob es da nicht eine bessere Lösung gibt, besonders da ich ja im Prinzip die gleiche Syntax/Abfrage oder wie man das nennt, ja schon weiter oben habe um das Verzeichnis zu erstellen.
Zum Programmieren gehört auch das Abstrahieren. Das beinhaltet das Erkennen von Mustern und einen Codeteil so zu schreiben, dass er universell verwendbar ist. Diesen kann man in eine Funktion auslagern. Man kann unterschiedliche Werte als Parameter übergeben und die Funktion errechnet mit der immer gleichen Vorschrift das Ergebnis daraus. Sie sollte dabei idealerweise so gestaltet sein, dass sie nur die ihr übergebenen Parameter kennen muss und sonst nichts aus der Umgebung, in der sie mal später ausgeführt werden soll.
Wenn du beispielsweise an zwei Stellen Werte berechnest, die nur in der Ausgabe unterschiedlich dargestellt werden sollen, könnte der Teil zur Berechnung in eine Funktion ausgelagert werden, in der nur die reinen Werte ermittelt werden. An der Stelle, an der die Werte dann gebraucht werden, bringt man sie dann in die gewünschte Ausgabeform.
foreach($wordlist as $word)
{
$verzeichnis=strtoupper(substr($word, 0, 1));
if(!isset($buchstabe)||$buchstabe!=$verzeichnis)
{
echo "<b><a name='$verzeichnis'>$verzeichnis</a></b><br>";
$buchstabe=$verzeichnis;
}
echo "$word<br>";
}
Es gibt ja so einige Einrückungs- und Klammernsetzungsstile. Der von dir gewählte ist in meinen Augen einer der weniger schönen. 1TBS oder Allman findet man wesentlich häufiger in freier Wildbahn. Wenn du einen mit mehr Konsens nimmst, machst du dir weniger Feinde :-) Wenigstens gehörst du nicht zu denen, die unformatierte Codehaufen fabrizieren. Auch erhöht ein Leerzeichen zwischen Operanden und Operatoren die Lesbarkeit. Man ist das ja aus gewohnt von dem üblichen Methode Leerzeichen zwischen zwei Wörter eines Satzes einzufügen. Das Zend Framework ist sicher noch zu hoch für deine Kenntnisse, aber du kannst dir mal dessen Coding Standard anschauen (besonders Kapitel B.4), um mal zu sehen, wie man Code notieren kann, dass er leicht lesbar ist.
echo "$verabschiedung $name";