按日期在PHP中对文件进行排序

按日期在PHP中对文件进行排序

我现在有一个index.php文件,它允许我输出同一个目录中的文件列表,输出显示名称,然后我使用filemtime()函数来显示文件修改时的日期。我现在的问题是,如何对输出进行排序以显示最新修改的文件?如果我是用MySQL交互来做这件事的话,那就没有问题了。请给我一个例子,如何排序和输出从最近修改的文件列表。这就是我现在所拥有的

if ($handle = opendir('.')) {while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $lastModified = date('F d Y, H:i:s',filemtime($file));
          if(strlen($file)-strpos($file,".swf")== 4){
            echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a>
            </td><td>$lastModified</td></tr>";
           }
       }
   }
   closedir($handle);}


开心每一天1111
浏览 641回答 3
3回答

守着星空守着你

您需要将文件放入数组中,以便对最后修改的文件进行排序和查找。$files&nbsp;=&nbsp;array();if&nbsp;($handle&nbsp;=&nbsp;opendir('.'))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(false&nbsp;!==&nbsp;($file&nbsp;=&nbsp;readdir($handle)))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($file&nbsp;!=&nbsp;"."&nbsp;&&&nbsp;$file&nbsp;!=&nbsp;"..")&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$files[filemtime($file)]&nbsp;=&nbsp;$file; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;closedir($handle); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;sort &nbsp;&nbsp;&nbsp;&nbsp;ksort($files); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;find&nbsp;the&nbsp;last&nbsp;modification &nbsp;&nbsp;&nbsp;&nbsp;$reallyLastModified&nbsp;=&nbsp;end($files); &nbsp;&nbsp;&nbsp;&nbsp;foreach($files&nbsp;as&nbsp;$file)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$lastModified&nbsp;=&nbsp;date('F&nbsp;d&nbsp;Y,&nbsp;H:i:s',filemtime($file)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($file)-strpos($file,".swf")==&nbsp;4){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($file&nbsp;==&nbsp;$reallyLastModified)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;stuff&nbsp;for&nbsp;the&nbsp;real&nbsp;last&nbsp;modified&nbsp;file &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"<tr><td><input&nbsp;type=\"checkbox\"&nbsp;name=\"box[]\"></td><td><a&nbsp;href=\"$file\"&nbsp;target=\"_blank\">$file</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>$lastModified</td></tr>"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}没有测试,但这是怎么做的。

萧十郎

这将使.swf扩展名为.swf的路径/to/文件中的所有文件进入数组,然后根据文件的mtime对该数组进行排序。$files&nbsp;=&nbsp;glob('path/to/files/*.swf');usort($files,&nbsp;function($a,&nbsp;$b)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;filemtime($a)&nbsp;<&nbsp;filemtime($b);});上面使用的是Lambda函数并需要PHP 5.3。在5.3之前,你会usort($files,&nbsp;create_function('$a,$b',&nbsp;'return&nbsp;filemtime($a)<filemtime($b);'));如果不想使用匿名函数,则可以将回调定义为常规函数,并将函数名称传递给usort相反。在得到的数组中,您可以像下面这样迭代这些文件:foreach($files&nbsp;as&nbsp;$file){ &nbsp;&nbsp;&nbsp;&nbsp;printf('<tr><td><input&nbsp;type="checkbox"&nbsp;name="box[]"></td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td><a&nbsp;href="%1$s"&nbsp;target="_blank">%1$s</a></td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td>%2$s</td></tr>',&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file,&nbsp;//&nbsp;or&nbsp;basename($file)&nbsp;for&nbsp;just&nbsp;the&nbsp;filename&nbsp;w\out&nbsp;path &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date('F&nbsp;d&nbsp;Y,&nbsp;H:i:s',&nbsp;filemtime($file)));}请注意,因为您已经调用了filemtime在对文件进行排序时,在foreach循环中再次调用它时,由于STAT缓存.

互换的青春

一个使用回收董事类,这是在文件系统上递归迭代的一种方便方法。$output&nbsp;=&nbsp;array();foreach(&nbsp;new&nbsp;RecursiveIteratorIterator(&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;RecursiveDirectoryIterator(&nbsp;'path',&nbsp;FilesystemIterator::SKIP_DOTS&nbsp;|&nbsp;FilesystemIterator::UNIX_PATHS&nbsp;)&nbsp;)&nbsp;as&nbsp;$value&nbsp;)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;$value->isFile()&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output[]&nbsp;=&nbsp;array(&nbsp;$value->getMTime(),&nbsp;$value->getRealPath()&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}}usort&nbsp;(&nbsp;$output,&nbsp;function(&nbsp;$a,&nbsp;$b&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$a[0]&nbsp;>&nbsp;$b[0];});
打开App,查看更多内容
随时随地看视频慕课网APP