获取目录

时间:2016-07-04 18:01:08

标签: php

如何在PHP中获取目录中的最后X个文件?

我使用此代码获取最后一个文件,但我如何获取最后X个文件?

我的代码:

$path = "/path/test/"; 

$latest_ctime = 0;
$latest_filename = '';    

$d = dir($path);
while (false !== ($entry = $d->read())) {
   $filepath = "{$path}/{$entry}";
   // could do also other checks than just checking whether the entry is a file
   if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
      $latest_ctime = filectime($filepath);
       $latest_filename = $entry;
   }
}

2 个答案:

答案 0 :(得分:1)

<?php
$arr = array();
$path = "/Users/alokrajiv/Downloads/";
$d = dir($path);
if ($handle = opendir($path)) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            $filepath = "{$path}{$entry}";
            $tmp = array();
            $tmp[0] = $filepath;
            $tmp[1] = filemtime($tmp[0]);
            array_push($arr, $tmp);
        }
    }
    closedir($handle);
}
function cmp($a, $b){
    $x = $a[1];
    $y = $b[1];
    if ($x == $y) {
        return 0;
    }
    return ($x > $y) ? -1 : 1;
}
usort($arr, 'cmp');
$x = 10;
while(count($arr)>$x){
    array_pop($arr);
}
var_dump($arr); //has last modified 10 files

按降序排序然后弹出,直到剩下10个元素。

答案 1 :(得分:1)

可能会更简单一些:

$files  = array_filter(glob("$path/*.*"), 'is_file');
array_multisort(array_map('filectime', $files), SORT_DESC, $files);
$result = array_slice($files, 0, $x);
  • 阅读glob()的所有文件,并使用is_file()
  • 进行过滤
  • filectime()降序
  • 对文件进行排序
  • 切割第一个(最新的)$x个文件数