PHP - 按字母顺序列出目录文件

时间:2015-06-25 17:31:15

标签: php sorting foreach directory

我有一个列出目录中所有文件的页面,如果可能的话,我希望它们按字母顺序排序。不太清楚如何做到这一点。以下是当前代码。如果有人有任何想法,那就太棒了!

<?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;
  }
?>

<?php
  // list files in the current directory
  $dirlist = getFileList(".");
  $dirlist = getFileList("./");
?>


<?php
  echo "<div id=\"menu\">";
  echo "<div class=\"menu1 title\">Name</div><div class=\"menu2 title\">Last Modified</div>\n";
  foreach($dirlist as $file) {
    echo "<div class=\"menu1\"><a href=\"{$file['name']}\" target=\"_blank\">",number_format(++$counter),".&nbsp;",basename($file['name']),"</div>\n";
    echo "<div class=\"menu2\">",date('r', $file['lastmod']),"</div>\n";
  }
  echo "<div class=\"clear\"></div>\n";
  echo "</div>\n";
?>

2 个答案:

答案 0 :(得分:1)

添加此

natsort($retval);

return $retval;

答案 1 :(得分:0)

在你的getFileList函数中,在返回值之前添加它:

usort($retval, function($dirA, $dirB) {
    return strnatcmp($dirA['name'], $dirB['name']);
});

请注意,您需要使用php 5.3.0或更高版本才能使用匿名函数。