kostenloser Webspace werbefrei: lima-city


[PHP] Array alphabetisch ordnen und dann Buchstaben mitgeben

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s*****d

    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
    <hr />
    Striche angezeigt werden.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. 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>&nbsp;</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>&nbsp;</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

  5. Autor dieses Themas

    s*****d

    Hallo!
    Danke, webnfo, für deine Hilfe, das war genau, was ich gesucht habe...

    MfG. Simon D.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!