nucleardreamer Posted February 23, 2009 Share Posted February 23, 2009 Hi guys, I seem to be having a problem with this function that spits out directories. There is a numeric prefix that is on every directory, so it automatically sorts these by the numbers, not the name of the actual folder I want to display. So to sort correctly I did the following (and I know it works right because the array is the same but sorted different) but every time I do it, it gives me a 500 error and the error.log tails that the header is prematurely broken, I dont know whats causing it! One thing that is possibly (or more likely) is that the directory names are somehow different, there is a space somewhere i don't know... something?! //example foldername: -20090101N-TestFolder // I want it to sort by TestFolder not the starting date of the name. function traverseDirTree($base,$fileFunc,$dirFunc=null,$afterDirFunc=null){ // this is the spot where the prefix ends $scan_index=11; // puts the dir from $base into an array $subdirectories = scandir($base); // breaks the array apart, putting the original prefix at the end, and stores a temp array foreach($subdirectories as $myscan){ if ($myscan != "." && $myscan != "..") { $newScan = substr($myscan,$scan_index).substr($myscan,0,$scan_index); $scan_temp[]=$newScan; } } // sort the temp dir, and empty the original array sort($scan_temp); $subdirectories = array(); // put the prefix back in the beginning after its sorted foreach($scan_temp as $scan){ $newScan = substr($scan,(0-$scan_index),$scan_index).substr($scan,0,(0-$scan_index)); $subdirectories[]=$newScan; } // this traverses the directory, looking for files and subdirectories, then running the script again for every subdir foreach ($subdirectories as $subdirectory){ if ($subdirectory != "." && $subdirectory != "..") { $path=$base.$subdirectory; if (is_file($path)){ if ($fileFunc!==null) $fileFunc($path); }else{ if ($dirFunc!==null) $dirFunc($path); if (($subdirectory!='.') && ($subdirectory!='..')){ traverseDirTree($path.'/',$fileFunc,$dirFunc,$afterDirFunc); } if ($afterDirFunc!==null) $afterDirFunc($path); } } } } Link to comment https://forums.phpfreaks.com/topic/146569-directory-traversesorting-problem/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.