как отсортировать каталоги над файлами в php - PullRequest
1 голос
/ 16 апреля 2019

Для управления файлами я использовал рендеринг папок и файлов с помощью 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;
}

Но теперь сортировка больше не работает.Как я могу сначала отсортировать каталоги, а затем файлы?

...