2016-09-17 27 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

関連する問題