为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
开心每一天1111 2019-07-02 11:08:26
按日期在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);}
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您需要将文件放入数组中,以便对最后修改的文件进行排序和查找。

$files = array();if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
           $files[filemtime($file)] = $file;
        }
    }
    closedir($handle);

    // sort
    ksort($files);
    // find the last modification
    $reallyLastModified = end($files);

    foreach($files as $file) {
        $lastModified = date('F d Y, H:i:s',filemtime($file));
        if(strlen($file)-strpos($file,".swf")== 4){
           if ($file == $reallyLastModified) {
             // do stuff for the real last modified file
           }
           echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a>
           </td><td>$lastModified</td></tr>";
        }
    }}

没有测试,但这是怎么做的。


查看完整回答
反对 回复 2019-07-02
?
萧十郎

TA贡献1815条经验 获得超13个赞

这将使.swf扩展名为.swf的路径/to/文件中的所有文件进入数组,然后根据文件的mtime对该数组进行排序。

$files = glob('path/to/files/*.swf');usort($files, function($a, $b) {
    return filemtime($a) < filemtime($b);});

上面使用的是Lambda函数并需要PHP 5.3。在5.3之前,你会

usort($files, create_function('$a,$b', 'return filemtime($a)<filemtime($b);'));

如果不想使用匿名函数,则可以将回调定义为常规函数,并将函数名称传递给usort相反。

在得到的数组中,您可以像下面这样迭代这些文件:

foreach($files as $file){
    printf('<tr><td><input type="checkbox" name="box[]"></td>
            <td><a href="%1$s" target="_blank">%1$s</a></td>
            <td>%2$s</td></tr>', 
            $file, // or basename($file) for just the filename w\out path
            date('F d Y, H:i:s', filemtime($file)));}

请注意,因为您已经调用了filemtime在对文件进行排序时,在foreach循环中再次调用它时,由于STAT缓存.


查看完整回答
反对 回复 2019-07-02
?
互换的青春

TA贡献1797条经验 获得超6个赞

一个使用回收董事类,这是在文件系统上递归迭代的一种方便方法。

$output = array();foreach( new RecursiveIteratorIterator( 
    new RecursiveDirectoryIterator( 'path', FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS ) ) as $value ) {      
        if ( $value->isFile() ) {
            $output[] = array( $value->getMTime(), $value->getRealPath() );
        }}usort ( $output, function( $a, $b ) {
    return $a[0] > $b[0];});


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 640 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信