Den folgenden Algoritmus verwende ich, um ein Array zu generieren, in welchem die Pfade drinnen stehen, in denen ich Klassen in __autoload suche. Am Anfang steht was drin wie "./plugins/" oder "./classes/". Der Algorithmus geht nun diese Verzeichnisse durch und guckt, ob sie noch Unterverzeichnisse haben. Wenn ja werden auch diese wieder analysiert.
Das Problem ist, dass man in einer Schleife nichts zum Array hinzufügen oder aus dem Array entfernen kann, über das man iteriert. Deswegen einige Hilfsarrays.
Geht der Code noch effizienter/kürzer ohne Rekursion?
function autoload_paths_update() {
$check = $GLOBALS['autoload_paths'];
$new = array();
while(count($check) > 0) {
$add = array();
$remove = array();
foreach($check as $key=>$path) {
$items = scandir($path);
$subdirs = array();
foreach($items as $item) {
if (is_dir($path.$item) && substr($item, 0, 1) != '.') {
$subdirs[] = $path.$item.'/';
}
}
foreach($subdirs as $sd) {
$add[] = $sd;
}
$remove[] = $key;
$new[] = $path;
}
foreach($remove as $key) {
unset($check[$key]);
}
foreach($add as $a) {
$check[] = $a;
}
}
$GLOBALS['autoload_paths'] = $new;
}
--
ie:{ br: fl:( va:) ls:& fo:| rl:( n4:( de:] ss:) ch:| js:| mo:| sh:( zu:)
ie:{ br: fl:( va:) ls:& fo:| rl:( n4:( de:] ss:) ch:| js:| mo:| sh:( zu:)