Verzeichnis auslesen mit Sortierung

visiondpc

Erfahrenes Mitglied
Hallo zusammen.

ich arbeite grade an einem Script, das mir den Inhalt eines Verzeichnisses anzeigt. Ich habe dafür eine schon vorgefertigte Funktion benutz, die ich dementsprechend angepasst habe.

PHP:
function list_dir($pfad)
{
	if($pointer=opendir($pfad)) 
	{
		while($datei=readdir($pointer))
		{
			if ($datei!="." && $datei!="..")
			{
				if(is_dir($pfad.'/'.$datei))
				{
					$string .= '<img src="../images/find.png" alt="" /> <a href="'.$_SERVER['PHP_SELF'].'?dir='.$datei.'" class="link" >'.$datei.'</a><br />';
				}
			}
		}
		closedir($pointer);
	}  
	return($string);
}

Jetzt habe ich nur folgendes Problem, der Inhalt wird ohne ein erkennbares System dargestellt. Besteht die Möglichkeit, sich das alles alphabetisch geordnet ausgeben zu lassen ohne umständliche Sortierfunktion?
 
Zuletzt bearbeitet:
Anstatt die Dateien gleich mit <img>-Tag in einen String zu haengen koenntest Du erstmal alle Dateien in ein Array setzen, diesen dann mit sort() sortieren und anschliessend in <img>-Tags packen.

Uebrigens, ohne System ist nicht ganz richtig. Denn wenn ich mich nicht irre duerfte die Reihenfolge die Reihenfolge der Uploads darstellen.
 
Danke Euch beiden für die hilfe. Ich habe das jetzt so gelöst.

PHP:
function list_dir($pfad)
{
	$i=0;
	if($pointer=opendir($pfad)) 
	{
		while($datei=readdir($pointer))
		{
			if ($datei!="." && $datei!="..")
			{
				if(is_dir($pfad.'/'.$datei))
				{
					$arr[$i] = $datei;
					$i++;
				}
			}
		}
		closedir($pointer);
	}  
	array_multisort($arr);
	foreach ($arr as $value) 
	{
    	$string .= '<img src="../images/find.png" alt="" /> <a href="'.$_SERVER['PHP_SELF'].'?dir='.$value.'" class="link" >'.$value.'</a><br />';
	}

	return($string);
}

Ich fürchte mal, das ist nicht die sauberste Art ein Array dynamisch zu füllen aber auf die Schnelle habe ich keine bessere gefunden.
 
Re: AW: Verzeichnis auslesen mit Sortierung

Auf $i kannst Du verzichten wenn Du $array[] nutzt um das naechste Element hinzuzufuegen.
PHP:
function list_dir($pfad)
{
	$arr=array();
	if($pointer=opendir($pfad)) 
	{
		while($datei=readdir($pointer))
		{
			if ($datei!="." && $datei!="..")
			{
				if(is_dir($pfad.'/'.$datei))
				{
					$arr[] = $datei;
				}
			}
		}
		closedir($pointer);
	}  
	array_multisort($arr);
	foreach ($arr as $value) 
	{
    	$string .= '<img src="../images/find.png" alt="" /> <a href="'.$_SERVER['PHP_SELF'].'?dir='.$value.'" class="link" >'.$value.'</a><br />';
	}

	return($string);
}
 
Re: AW: Verzeichnis auslesen mit Sortierung

Noch ein Stilhinweis: ich weiß zwar, dass einige predigen, es solle in einer Funktion nur immer nur eine Rückgabe erfolgen, dennoch bevorzuge ich folgenden Aufbau:
PHP:
function list_dir($pfad)
{
	// Prüfung, ob das angegebene Verzeichnis geöffnet werden kann
	if( ($pointer = opendir($pfad)) == false ) {
		// Im Fehlfall ist das bereits der Ausgang
		return false;
	}

	$arr = array();
	while( $datei = readdir($pointer) ) {
		// Prüfung, ob es sich überhaupt um Verzeichnisse handelt
		// oder um Synonyme für das aktuelle (.) bzw.
		// das übergeordnete Verzeichnis (..)
		if( !is_dir($pfad.'/'.$datei) || $datei == '.' || $datei != '..' ) {
			// Falls ja, werden diese übersprungen
			continue;
		}
		$arr[] = $datei;
	}
	closedir($pointer);
	array_multisort($arr);
	$string = '';
	foreach( $arr as $value ) {
		$string .= '<img src="../images/find.png" alt="" /> <a href="'.$_SERVER['PHP_SELF'].'?dir='.$value.'" class="link" >'.$value.'</a><br />';
	}
	return $string;
}
 

Neue Beiträge

Zurück