Mailinglisten-Archive |
> Nur wie kann ich das ganze rekursiv machen?
> D.h. wenn ein Unterordner gefunden wird, soll dessen Inhalt auch ausgegeben
> werden.
so ein zufall :)
gestern hab ich meine rekursiven funktionen mal überarbeitet
und als statische methoden in eine klasse gepackt.
dh du kannst sie auch per copy and paste als standalone funktion
verwenden.
-readList liest verzeichnisse in lineares array
-readTree liest verzeichnisse in verschachteltes array
ich hoffe das ist jetzt kein overhead für dich,
bei problemen gleich fragen.
PS:
falls jemandem für die readTree geschichte eine bessere
struktur einfällt, bitte ich um vorschläge.
hier der code:
-------------------------------------------------------
class DirectoryReader
{
function readList(&$arr, $dir, $replace=false)
{
if ($h = opendir($dir))
{
while (false !== ($file = readdir($h)))
{
if ($file !== '.' && $file !== '..')
{
if($replace)
{
$curDir = "$dir/$file";
$arr[] = str_replace(key($replace), $replace[key($replace)], $curDir);
}
else
{
$curr = $arr[] = "$dir/$file";
}
if(is_dir($curDir))
{
DirectoryReader::readList($arr, $curDir, $replace);
}
}
}
}
closedir($h);
return $arr;
}
function readTree(&$arr, $dir, $replace=false)
{
if ($h = opendir($dir))
{
while (false !== ($file = readdir($h)))
{
if ($file !== '.' && $file !== '..')
{
if($replace)
{
$curDir = "$dir/$file";
$value = str_replace(key($replace), $replace[key($replace)], $curDir);
}
else
{
$curDir = $value = "$dir/$file";
}
if(is_dir($curDir))
{
$arr[] = array('type' => RDR_TYPE_DIR, 'value' => $value, 'node' => array());
DirectoryReader::readTree($arr[count($arr)-1]['node'], $curDir, $replace);
}
else
{
$arr[] = array('type' => RDR_TYPE_FILE, 'value' => $value);
}
}
}
}
closedir($h);
return $arr;
}
}
php::bar PHP Wiki - Listenarchive