Array alphabetisch sortieren....

ahnernoch

Mitglied
Hallo! Kann mir vielleicht einer weiterhelfen wie ich die folgende Array Ausgabe alphabetisch sortieren anstatt in shuffle?

Lg und danke schon einmal.

Code:
<?php
$dir = $_GET['dir'];
$files = array();
 
$allowedE = array(
  "mpg",
  "avi",
  "divx",
  "mov",
  "mpeg2",
  "mkv",
  "ts",
  "ps",
  "mp4",
  "mp2"
);
 
function filter($path, $aE)
{
    $ext = end(explode(".", $path));    
    if (in_array($ext, $aE))
    {
        return true;
    }
    else
    {
        return false;
    }
}
 
function getFiles($dir, &$files){
    global $allowedE;
    if ($handle = opendir($dir)) {
        while (false !== ($file = readdir($handle)))
        {
            if($file == '.' || $file == '..')
                continue;
               
            $path = $dir.'/'.$file;
            if (is_dir($path))
            {
                        getFiles($path, $files);
            }
            else if (filter($path, $allowedE))
            {
                $files[] = 'file://'.$path;
            }
        }
        closedir($handle);
    }
    return $files;
}
getFiles($dir, $files);
shuffle($files);
foreach ($files as $key => $value)
{
    echo 'shuffle|0|0|'.$value.'|';
}
?>
 
Zuerst stellt sich die Frage, nach was alphabetisch sortiert werden soll. Ich denke mal nach dem Titel (Dateiname)?

Dafür gäbe es 2 Möglichkeiten:
  1. Du baust deine Suchfunktion so um, dass sie als Array-Key den Dateinamen (ohne Endung?) nimmt -> Dateiname muss eindeutig sein, darf also also nicht in 2 verschiedenen Verzeichnissen existieren, falls der Inhalt unterschiedlich ist.
  2. Du baust das in deine Sortierfunktion ein. Sprich Dateiname aus dem Pfad extrahieren und dann für die Sortierung vergleichen -> Dateiname muss nicht eindeutig sein und es ist keine Änderung an der Suchfunktion nötig.

Soll einfach nur der Pfad alphabetisch sortiert werden, dann musst du nichts umbauen und kannst shuffle() einfach durch sort() bzw. rsort() ersetzen (welche was macht -> PHP-Doku ;) )

Für den 1. Fall kannst du ksort() bzw. krsort() benutzen
Für den 2. Fall muss dann eine Funktion mittels usort() aufgerufen werden, die so aussehen könnte:
PHP:
function extractFilename($path)
{
    $name = explode('.', basename($path));
    return $name[0];
}
function mySortFunction($a, $b)
{
    // extrahiere Dateiname aus Pfad $a
    $name_a = extractFilename($a);
    // extrahiere Dateiname aus Pfad $b
    $name_b = extractFilename($b);

    return strcmp($name_a, $name_b);
}
// [...] Code bis shuffle()
usort($files, "mySortFunction");
// [...] Code nach shuffle()

Habe die letzten Funktionen gerade nicht getestet (grad kein PHP zur Verfügung), sollte aber theoretisch so funktionieren.

Habe hoffentlich keinen Logikfehler drin.

Edit: Funktion zum extrahieren hinzugefügt. Ist die Endung egal, kannst du auch direkt basename() verwenden.
 
Zuletzt bearbeitet:
Zuerst stellt sich die Frage, nach was alphabetisch sortiert werden soll. Ich denke mal nach dem Titel (Dateiname)?

Dafür gäbe es 2 Möglichkeiten:
  1. Du baust deine Suchfunktion so um, dass sie als Array-Key den Dateinamen (ohne Endung?) nimmt -> Dateiname muss eindeutig sein, darf also also nicht in 2 verschiedenen Verzeichnissen existieren, falls der Inhalt unterschiedlich ist.
  2. Du baust das in deine Sortierfunktion ein. Sprich Dateiname aus dem Pfad extrahieren und dann für die Sortierung vergleichen -> Dateiname muss nicht eindeutig sein und es ist keine Änderung an der Suchfunktion nötig.

Soll einfach nur der Pfad alphabetisch sortiert werden, dann musst du nichts umbauen und kannst shuffle() einfach durch sort() bzw. rsort() ersetzen (welche was macht -> PHP-Doku ;) )

Für den 1. Fall kannst du ksort() bzw. krsort() benutzen
Für den 2. Fall muss dann eine Funktion mittels usort() aufgerufen werden, die so aussehen könnte:
PHP:
function extractFilename($path)
{
    $name = explode('.', basename($path));
    return $name[0];
}
function mySortFunction($a, $b)
{
    // extrahiere Dateiname aus Pfad $a
    $name_a = extractFilename($a);
    // extrahiere Dateiname aus Pfad $b
    $name_b = extractFilename($b);

    return strcmp($name_a, $name_b);
}
// [...] Code bis shuffle()
usort($files, "mySortFunction");
// [...] Code nach shuffle()

Habe die letzten Funktionen gerade nicht getestet (grad kein PHP zur Verfügung), sollte aber theoretisch so funktionieren.

Habe hoffentlich keinen Logikfehler drin.

Edit: Funktion zum extrahieren hinzugefügt. Ist die Endung egal, kannst du auch direkt basename() verwenden.

Grubi du bist der Beste! Danke dir! Dich bräuchte ich echt mal ein Tag an meinem Schreibtisch. Dann wären alle meine Probleme gelöst :-)

Hab noch so viel was ich an dem Programm ändern will. Wenn ich Anfange zu nerven sag bescheid. ;-)
 
Zurück