2016-01-23 119 views
0

我正在爲我的用戶創建一個文件管理器,它現在很基本,並且列出了它們目錄中的每個文件夾和文件。按文件類型排序文件管理器陣列

<?PHP 
    function getFileList($dir) 
    { 
    // array to hold return value 
    $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") 
     ); 
     } elseif(is_readable("$dir$entry")) { 
     $retval[] = array(
      "name" => "$dir$entry", 
      "type" => mime_content_type("$dir$entry"), 
      "size" => filesize("$dir$entry"), 
      "lastmod" => filemtime("$dir$entry") 
     ); 
     } 
    } 
    $d->close(); 

    return $retval; 
    } 
?> 

然後它回聲這些信息的響應表:

<table class="table table-striped table-bordered table-hover" id="dataTables-example"> 
            <thead> 
             <tr> 
              <th>Select</th> 
              <th>Filename</th> 
              <th>Type</th> 
              <th>Last Modified</th> 
              <th>Size</th> 
              <th>Actions</th> 
             </tr> 
            </thead> 
            <tbody> 
            <? 
$dirlist = getFileList("../test/".$ref.""); 
    // output file list in HTML TABLE format 
    foreach($dirlist as $file) { 
     $files = $file['name']; 
     $tmp = explode('../test/'.$ref.'/', $files); 
     $filename = end($tmp); 
     $filenames = rtrim($filename, '/'); 
    ?> 
             <tr class="odd gradeX">   
              <td><input type="checkbox" name="test" value="test"></td> 
              <td><a href="<? if($file['type'] == 'dir'){ echo 'user_filemanager.php?ref='.$ref.'/'.$filenames.''; } else { echo 'http://mysite.co.uk/test/'.$ref.'/'.$filenames.''; } ?>"><? echo $filenames; ?></a></td> 
              <td><? echo $file['type']; ?></td> 
              <td class="center"><? echo date('r', $file['lastmod']) ?></td> 
              <td class="center"><? echo $file['size']; ?></td> 
              <td class="center">X</td> 
             </tr> 
    <? 
    } 
    ?> 
            </tbody> 
           </table> 

我的問題是它在隨機輸出數據。我希望它顯示所有目錄第一。列出文件之前。所以所有的目錄都在最上面。這可能嗎?目前的目錄顯示爲dir$file['type'];

+1

所以排序結果輸出前陣。以'usort'爲例。 –

+0

我查過它,但沒有找到我如何將它用於這種類型的事情的例子? – Snappysites

回答

0

在你的情況usort簡單的例子是:

function getFileList($dir) 
{ 
    // code here 

    // sort by `type` key: 
    usort($retval, function($a, $b) { return $a['type'] == 'dir'? -1 : 1; }); 

    return $retval; 
}