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

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


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>";

      }

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


蓝山帝景
浏览 170回答 2
2回答

慕娘9325324

您必须使用此。if ($handle = opendir($dir)) {&nbsp; &nbsp; &nbsp; &nbsp; while (false !== ($file = readdir($handle))) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $files[] = $file;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; sort($files);&nbsp; &nbsp; &nbsp; &nbsp; $clength = count($files);&nbsp; &nbsp; &nbsp; &nbsp; for ($x = 0; $x < $clength; $x++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo $files[$x];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "<br>";&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }更新$files[] = strtolower($file); // for ignore first letter capital

肥皂起泡泡

要回答您的问题,您需要首先收集所有文件,然后立即对其进行排序。因此您的代码看起来像-<?phpwhile (false !== ($file = readdir($handle))) {&nbsp; &nbsp; &nbsp; $files[] = $file;}sort($files);但是,更好的选择是只使用scandir(),它会向您返回目录中的文件列表(包括文件夹),然后您可以对它们进行相应的排序。我使用过usort(),以按字母顺序对文件进行排序,而忽略了大写或小写,同时保留了文件名的原始表示形式。代码:<?php&nbsp;$files = array_diff(scandir(YOUR_DIRECTORY_PATH_HERE),array(".",".."));usort($files,function($file1,$file2){&nbsp; &nbsp; return strcmp(strtolower($file1),strtolower($file2));});print_r($files);我已经使用array_diff()删除了.和..,并且包含在的结果中scandir().
打开App,查看更多内容
随时随地看视频慕课网APP