[PHP] Array alphabetisch ordnen und dann Buchstaben mitgeben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
alphabet
anna
array
ausgeben
auslese
buchstabe
carina
code
datei
entsprechende buchstabe
ersten buchstaben
frage
http
leer zeile
liste
problem
strich
url
variable speichern
verzeichnis
-
Hallo!
Der Titel tut mir leid, er ist etwas nichtssagend, doch ich wusste nicht, wie ich das Problem mit so wenigen Zeichen schildern möchte...
Ich habe (auch mithilfe diesen Threads) alle Unterordner eines Verzeichnisses in ein Array ausgelesen und dieses dann alphabetisch sortiert.
Hier erst einmal der Code dazu:
<?php $alledateien = scandir('.'); foreach ($alledateien as $verzeichnis) { if(($verzeichnis != '.') && ($verzeichnis != '..') && is_dir($verzeichnis)) { //Dateien werden ausgeschlossen sort($verzeichnis); } } ?>
Nun möchte ich das Ganze ausgeben, was ja hiermit ganz einfach wäre:
<?php echo('<p>' . $verzeichnis . '</p>'); ?>
Aber ich möchte, dass vor jeden Alphabetsabschnitt der entsprechende Buchstabe steht.
Hier ein Beispiel:
Das Array:
"Anna", "Bernd", "Benedikt", "Anton", "Christoph", "Dominik", "Frank", "Carina"
Und das ganze soll dann so ausgegeben werden:
A ----- Anna Anton ----- B ----- Bernd Benedikt ----- C ----- Christoph Carina ----- D ----- Dominik ----- E ----- ----- F ----- Frank -----
Es sollte auch bei den Buchstaben, zu denen keine Einträge vorhanden sind (wie bei E) der Buchstabe und die
Striche angezeigt werden.<hr />
Ich hoffe, ihr versteht mein Problem und könnt mir helfen!
MfG. Simon D.
EDIT: Es soll natürlich dann noch weitergehen bis Z, dann werden logischerweise wie bei dem E nur die Striche gemacht.
Beitrag zuletzt geändert: 18.12.2013 22:13:00 von simon-d -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du könntest mittels substr (http://de3.php.net/manual/de/function.substr.php) den ersten Buchstaben auslesen und ihn in einer Variable speichern und dann in einer If Abfrage bei jedem Punkt prüfen, ob es sich immer noch um den selben Buchstaben handelt. Wenn nicht entsprechend eine zwischenüberschrift einfügen.
-
Du kannst auch ein Hilfs-Array anlegen,
das für alle Buschstaben von A bis Z jeweils ein Sub-Array enthält
und dann, je Anfangs-Buschstabe, den Name in das passende Sub-Array ablegen
Dann kannst Du dieses Hilfs-Array mit foreach() durchlaufen,
und jeden Buschstaben als Titel ausgeben, und wenn im
Sub-Array auch was steht, dann die Namen als Liste ausgeben
wenn nicht, einfach eine Leer-Zeile z.B: mit <p> </p>
der folgende Code ist (hofentlich) selbst-Erklärend
<?php // -------------------------------------------- $verz_data = array( 'A' => array(), 'B' => array(), 'C' => array(), 'D' => array(), 'E' => array(), 'F' => array(), 'G' => array(), 'H' => array(), 'I' => array(), 'J' => array(), 'K' => array(), 'L' => array(), 'M' => array(), 'N' => array(), 'O' => array(), 'P' => array(), 'Q' => array(), 'R' => array(), 'S' => array(), 'T' => array(), 'U' => array(), 'V' => array(), 'W' => array(), 'X' => array(), 'Y' => array(), 'Z' => array(), ); // -------------------------------------------- $alledateien = scandir('.'); foreach ($alledateien as $verzeichnis) { if(($verzeichnis != '.') && ($verzeichnis != '..') && is_dir($verzeichnis)) { $buschstabe = strtoupper(substr($verzeichnis, 0, 1)); $verz_data[$buschstabe][] = $verzeichnis; } } // -------------------------------------------- foreach ($verz_data as $key => $val) { print "<hr />\n"; print "<h2>$key</h2>\n"; // --- der Buschstabe aus Alphabet --- print "<hr />\n"; if (!empty($val)) { // --- Name(n) zum Buschstabe vorhanden --- sort($val); print "<ul>\n"; foreach($val as $name) { print "<li>$name</li>\n"; } print "</ul>\n"; } else { print "<p> </p>\n"; // --- kein Name zum Buschstabe vorhanden --- } } print "<hr />\n"; // -------------------------------------------- ?>
sonst einfach nochmal nach-fragen :=)
mit diesem Code wird jeder Buschstabe (A bis Z) ausgegeben,
wenn mit Namen dazu, dann diese als Liste (sonst nur Leerzeile)
... anstatt <h2> für Buschstabe und <ul> Liste für Namen
kannst Du ja auch eine andere HTML Formatierung machen
-
Hallo!
Danke, webnfo, für deine Hilfe, das war genau, was ich gesucht habe...
MfG. Simon D. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage