在PHP中的getMTim​​e上对DirectoryIterator进行排序

时间:2018-02-13 18:10:01

标签: php sorting

我对PHP非常陌生,但作为一个开始,我已根据时间制作了一个文件删除/列表。如果您访问该页面,并且服务器找到的文件大于约。 10天后,它会删除该文件。否则,它将显示该文件。我想要做的是对时间后显示的文件进行排序,因此最新的文件排在第一位。我尝试了各种不同的方法+在这里搜索过,但是找不到适用于此的东西。我直接申请了

arsort($ DIR)

但由于它是一个对象,它不会让我。无法真正将其视为对每个项目进行排序的好方法。

function fileDelete(){
$dir = new DirectoryIterator(dirname(__FILE__));
$now = time();
$j = 0;
foreach($dir as $fileinfo){
    if($fileinfo->getExtension() == "png"){
        if($now - filemtime($fileinfo) >= (60 * 60 * 24 * 10)){
            unlink($fileinfo);
            echo $fileinfo . " deleted " . "<br>";
            $j++;
        } else { 
            $data = getImageSize($fileinfo);
            $width = $data[0];
            $height = $data[1];

            ?> 
                <a href="../<?php echo $fileinfo ?>"><img src="<?php echo $fileinfo ?>" width="<?php echo ($width/2) ?>" height="<?php echo ($height/2) ?>"></a>
            <?php }
    }
}
if($j == 0){
    return "No files deleted";
} else {
    return "<br>" . $j . " files deleted. <br>";
}

}

这是我的代码。我也尝试将array_push()转换为另一个数组并对其进行排序,但出于某种原因,它并没有起作用。我希望有人可以给我最好的练习,如果你发现任何,我很抱歉。我没有。

1 个答案:

答案 0 :(得分:0)

我确实解决了自己的问题: 我将代码分成两个foreach循环。在第一个中进行所有检查,删除文件,然后在下一个foreach循环中显示该文件。 完全回答:我正在寻找$ fil [0]。

function fileDelete(){
$dir = new DirectoryIterator(dirname(__FILE__));
$now = time();
$j = 0;
$filer = array();

foreach($dir as $fileinfo){
    if($fileinfo->getExtension() == "png"){
        if($now - filemtime($fileinfo) >= (60 * 60 * 24 * 10)){
            unlink($fileinfo);
            echo $fileinfo . " deleted " . "<br>";
            $j++; 
        } else {
        $filer[$fileinfo->getMTime()][] = $fileinfo->getFilename();
        }
    }   
}

arsort($filer);

foreach($filer as $fil){
            $data = getImageSize($fil[0]);
            $width = $data[0];
            $height = $data[1];

            ?> 
                <a href="../<?php echo $fil[0] ?>"><img src="<?php echo $fil[0] ?>" width="<?php echo ($width/2) ?>" height="<?php echo ($height/2) ?>"></a>
            <?php }

if($j == 0){
    return "No files deleted";
} else {
    return "<br>" . $j . " files deleted. <br>";
}

}