Для управления файлами я использовал рендеринг папок и файлов с помощью scandir
и foreach
и сортировал их: сначала каталоги, затем файлы
$files = array_diff( scandir($dir), array(".", "..", "tmp") );
usort ($files, create_function ('$a,$b', '
return is_dir ($a)
? (is_dir ($b) ? strnatcasecmp ($a, $b) : -1)
: (is_dir ($b) ? 1 : (
strcasecmp (pathinfo ($a, PATHINFO_EXTENSION), pathinfo ($b, PATHINFO_EXTENSION)) == 0
? strnatcasecmp ($a, $b)
: strcasecmp (pathinfo ($a, PATHINFO_EXTENSION), pathinfo ($b, PATHINFO_EXTENSION))
))
;
'));
foreach($files as $file){
if(is_dir($dir.'/'.$file)) {
echo $file; // $dir is directory(folder)
} else {
echo $file;
}
Поскольку scandir замедляется при рендерингемного файлов, теперь я использую opendir
и readdir
, как показано ниже:
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && $file != "tmp") { //ignoring dot paths under linux and tmp folder
if(is_dir($dir.'/'.$file)) {
echo $file; // $dir is directory(folder)
} else {
echo $file;
}
Но теперь сортировка больше не работает.Как я могу сначала отсортировать каталоги, а затем файлы?