如何对特定目录中的目录和文件进行排序?

时间:2019-04-19 13:21:08

标签: php arrays sorting

我正在读取目录中的所有目录和文件,并希望按字母顺序对文件进行排序。

if ($handle = opendir($dir)) {
   while (false !== ($file = readdir($handle))) {
      $files = array($file);
      sort($files);

      $clength = count($files);
      for($x = 0; $x < $clength; $x++) {
        echo $files[$x];
        echo "<br>";
      }

上面的代码向我输出所有目录和文件,但没有按字母顺序对它们进行排序。我在做什么错了?

2 个答案:

答案 0 :(得分:3)

您必须使用这个。

\subsection*{Subsection Title}

更新

if ($handle = opendir($dir)) {


        while (false !== ($file = readdir($handle))) {
            $files[] = $file;

        }
        sort($files);
        $clength = count($files);
        for ($x = 0; $x < $clength; $x++) {
            echo $files[$x];
            echo "<br>";
        }
    }

答案 1 :(得分:3)

要回答您的问题,您需要首先收集所有文件,然后立即对其进行排序。因此您的代码看起来像-

<?php

while (false !== ($file = readdir($handle))) {
      $files[] = $file;
}

sort($files);
  • 但是,更好的选择是只使用scandir(),它会向您返回目录中的文件列表(包括文件夹),然后可以对它们进行相应的排序。

  • 我使用了usort(),以按字母顺序对文件排序,忽略了大写或小写,同时保留了文件名的原始表示形式。

代码:

<?php 

$files = array_diff(scandir(YOUR_DIRECTORY_PATH_HERE),array(".",".."));

usort($files,function($file1,$file2){
    return strcmp(strtolower($file1),strtolower($file2));
});

print_r($files);
  • 我已使用array_diff()删除了.结果中包含的..scandir().