Dateibrowser nach Art und Name sortieren

GalaxyWarrior

Erfahrenes Mitglied
Hi, ich habe einen Dateibrowser geschrieben und die Ausgabe mit einem Array Alphabetisch sortiert. Jetzt habe ich das Problem, ich würde ihn gerne erst danach sortieren ob es eine Datei oder ein Ordner ist, und dann jeweils nach dem Alphabet.
Ich bekomme es aber nur nach Alphabet oder nach Art hin.
Kann mir jemand helfen?

Gruß GalaxyWarrior
 
Eine einfache Möglichkeit wäre:
setze beim Einlesen in den Array ein Prefix vor die Pfade....0 für Ordner, 1 für Dateien.

Dann kannst du alles sortieren... bei der Ausgabe musst du dann nur die Zahl wieder aus dem Pfad entfernen.


Ich gebe aber zu... ist eher eine schlampige Methode, es kommen aber bestimmt noch elegantere Vorschläge(wenn auch kaum Effektivere:-))
 
Im prinzip würde das gehen, aber da ich den Array vor der Ausgabe direkt weiterverarbeite müsste ich die 0 und 1 da wegbekommen.

Gruß GalaxyWarrior
 
Weil ich ja nicht die Datei 1[USER]/[DATEI] öffnen kann. Ich habe es mit einzelnem auslesen versucht, also Buchstabe für buchstabe, aber das Klappt net.
Der Code ist so:

PHP:
$read_out = $verzeichnisse[$count];
$verzeichnisse[$count] = "";
$c = 1;
while($substrat != ""){
        $substrat = substr($read_out , $c, 1);
        $c++;
        if($substrat != ""){
                $verzeichnisse[$count] = $verzeichnisse[$count].$substrat;
        }
}

Aber das klappt nicht

Bzw. es klappt bedingt. Ein Teil des Verzeichnisses wird angezeigt, aber auch nur nach Name und nicht nach Art sortiert. Der rest ist weg. Dafür steht der Fehler dass der die Datei oder das Verzichniss nicht finden kann.


Gruß GalaxyWarrior
 
Zuletzt bearbeitet:
Wäre es möglich das mit mehrdimensionalen Arrays zu machen? Wenn ja, kann mir das jemand erklären? Weil das mit den mehrdimensionalen Arrays habe ich net so wirklich kapiert.

Gruß GalaxyWarrior
 
Warum durchläufst du den Kram nicht einfach zweimal? Beim ersten Mal füllst du zwei neue Arrays $verzeichnisse und $dateien und beim zweiten Mal gibst du die beiden alphabetisch sortiert aus.
 
Aber wenn ich beide nach alphabet sortiere, dann passen die nicht mehr zueinander, weil dann habe ich die Verzeichnisse und Datein nach dem Alphabet sortiert, und hinten steht dann file und dir nach Alphabet. Also sowas:

blubb.php | dir
broddel.jpg | dir
images | file
save | file

Gruß GalaxyWarrior

P.S.: komm doch ma in ICQ Silent
 
Ich denke ein mehrdimensionales Array waere da wohl das richtige.

Vielleicht in dieser Form:
PHP:
$dir_array=array("dir"=>$dirname,"subdirs"=>array(),"files"=>array());
Im Sub-Array files werden halt die ganzen Dateien des Verzeichnisses abgelegt.
Das Sub-Array subdirs hat den gleichen Aufbau wie $dir_array.
Das ganze ist also rekursiv und sollte wohl somit am ehesten die Anordnung der Dateien auf Festplatte wiedergeben.
 
So, ich hab da grad mal was in der Richtung wie vorhin beschrieben gescriptet.
Jedoch nicht als reinen Multi-dimensionalen Array, sondern als Klasse.

PHP:
class directorylist
{
	public $name;
	public $subdirs;
	public $files;
	
	public function __construct($dirname)
	{
		$this->name=$dirname;
		$this->subdirs=array();
		$this->files=array();
		$dir=opendir($dirname);
		while ($file=readdir($dir))
			{
				if (($file!=".") && ($file!=".."))
					{
						if (is_dir($dirname."/".$file))
							{
								$this->subdirs[]=new directorylist($dirname."/".$file);
							}
						else
							{
								$this->files[]=$file;
							}
					}
			}
		closedir($dir);
	}
}

Um nun ein Verzeichnis zu scannen reicht es aus ein neues Objekt vom Typ directorylist zu erstellen und diesem den Verzeichnisnamen anzugeben.
Alle Unterverzeichnisse werden in einem Array aus Objekten des Typs directorylist aufgelistet.
Alle Dateien des jeweiligen Verzeichnisses/Objekts in einem Array innerhalb des entsprechenden Objekts.

Beispiel:
PHP:
$mydir=new directorylist("/var/www/htdocs");

Nachtrag: Hier eine Funktion zum Anzeigen der Daten im Objekt, der 2. Parameter ist optional und kann genutzt werden um zu bestimmen ob rekursiv auch die Daten der Unterverzeichnisse ausgegeben werden sollen oder lediglich die Daten des Hauptverzeichnisses. Letzteres ist Standard, wenn TRUE uebergeben wird kommen auch die anderen Daten.

PHP:
function showdir($dirlist,$recursive=false)
{
echo '<li>'.$dirlist->name.' [DIR]</li>';
echo '<ul>';
for ($x=0;$x<count($dirlist->subdirs);$x++)
	{
		if ($recursive==true)
			{
				showdir($dirlist->subdirs[$x],true);
			}
		else
			{
				echo '<li>'.$dirlist->subdirs[$x]->name.' [DIR]</li>';
			}
	}
for ($x=0;$x<count($dirlist->files);$x++)
	{
		echo '<li>'.$dirlist->files[$x].' [FILE]</li>';
	}
echo '</ul>';
}

2. Nachtrag: Das schreit schon fast nach einem Tutorial. ;)
 
Zuletzt bearbeitet:
Zurück