2016-09-17 2 views
0

사전 순으로 파일을 정렬하고 싶지만 어떻게 할 수 있는지 잘 모릅니다. 내 말은, 디렉토리가 ABC 순서의 첫 번째이고 ABC가 주문한 파일 뒤에 있기를 원합니다. 몇 가지 옵션을 시도했지만이를 수행 할 수 없었습니다.알파벳순으로 디렉토리 목록 정렬 및 표시 PHP

<?php 

    $dirlist = getFileList("./members/files/");?> 

    <table border="1"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Type</th> 
       <th>Size</th> 
       <th>Last Modified</th> 
      </tr> 
     </thead> 
     <tbody> 
      <?php 
      // output file list as table rows 
      foreach($dirlist as $file) { 
       echo "<tr>\n"; 

        $file['nams'] = basename($file['name']); 
        $file['nams2'] = pathinfo($file['nams'], PATHINFO_EXTENSION); 
        $file['nams'] = pathinfo($file['nams'], PATHINFO_FILENAME); 

        if($file['nams2'] != 'mp4' && $file['nams2'] != '') 
        { 
         echo "<td><a href=\"/members/get_file.php?name={$file['nams']}&ext={$file['nams2']}\">",basename($file['name']),"</a></td>\n"; 
        } else if($file['nams2'] != '') { 
         echo "<td><a href=\"/video.php?name={$file['nams']}\">",basename($file['name']),"</a></td>\n"; 
        } else { 
         echo "<td><a href=\"#\">",basename($file['name']),"</a></td>\n"; 
        } 

        echo "<td>{$file['type']}</td>\n"; 
        echo "<td>{$file['size']}</td>\n"; 
        echo "<td>",date('Y-m-d H:i', $file['lastmod']),"</td>\n"; 

       echo "</tr>\n"; 
      } 
      ?> 
     </tbody> 
    </table> 

    <?php 
    function getFileList($dir, $recurse=false, $depth=false) 
    { 
     $retval = array(); 

     // add trailing slash if missing 
     if(substr($dir, -1) != "/") $dir .= "/"; 

     // open pointer to directory and read list of files 
     $d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading"); 
     while(false !== ($entry = $d->read())) { 
      // skip hidden files 
      if($entry[0] == ".") continue; 
      if(is_dir("$dir$entry")) { 
       $retval[] = array(
        "name" => "$dir$entry/", 
        "type" => filetype("$dir$entry"), 
        "size" => 0, 
        "lastmod" => filemtime("$dir$entry") 
       ); 
       if($recurse && is_readable("$dir$entry/")) { 
        if($depth === false) { 
         $retval = array_merge($retval, getFileList("$dir$entry/", true)); 
        } elseif($depth > 0) { 
         $retval = array_merge($retval, getFileList("$dir$entry/", true, $depth-1)); 
        } 
       } 
      } elseif(is_readable("$dir$entry")) { 
       $retval[] = array(
        "name" => "$dir$entry", 
        "type" => mime_content_type("$dir$entry"), 
        "size" => formatSizeUnits(filesize("$dir$entry")), 
        "lastmod" => filemtime("$dir$entry") 
       ); 
      } 
     } 
     $d->close(); 

     return $retval; 
    } 

    function formatSizeUnits($bytes) 
    { 
     if ($bytes >= 1073741824) 
     { 
      $bytes = number_format($bytes/1073741824, 2) . ' GB'; 
     } 
     elseif ($bytes >= 1048576) 
     { 
      $bytes = number_format($bytes/1048576, 2) . ' MB'; 
     } 
     elseif ($bytes >= 1024) 
     { 
      $bytes = number_format($bytes/1024, 2) . ' kB'; 
     } 
     elseif ($bytes > 1) 
     { 
      $bytes = $bytes . ' bytes'; 
     } 
     elseif ($bytes == 1) 
     { 
      $bytes = $bytes . ' byte'; 
     } 
     else 
     { 
      $bytes = '0 bytes'; 
     } 

     return $bytes; 
    } 
?> 

답변

0

당신은 배열의 형태로 정렬 된 파일 목록을 반환 scandir을 사용할 수 다음은 내 코드입니다.

예 : 유사

<?php 
    $directory_list = scandir("./members/files/"); 
    print_r($directory_list); 

이 출력됩니다 디렉토리 목록 :

Array 
(
    [0] => . 
    [1] => .. 
    [2] => bar.php 
    [3] => foo.txt 
    [4] => somedir 
    ... 
) 

당신은 내림차순으로 정렬하기 위해 이런 식으로 작업을 수행 할 수 있습니다

print_r($directory_list, SCANDIR_SORT_DESCENDING); 

에 대한 자세한 정보를 찾을 수 있습니다.in PHP documentation.

관련 문제