Php 从按修改时间排序的目录中获取特定数量的文件

Php 从按修改时间排序的目录中获取特定数量的文件,php,opendir,Php,Opendir,我正在尝试编写一个函数,返回按修改时间排序的文件名和数组。 尽管我只想获取特定数量的文件,而不是目录中的全部文件。 总之,我想得到一个数组,其中包含目录中最新的X文件 这是我的代码: public static function GetPicsDir() { $results = array(); $handler = opendir("pics"); while ($file = readdir($handler)) {

我正在尝试编写一个函数,返回按修改时间排序的文件名和数组。 尽管我只想获取特定数量的文件,而不是目录中的全部文件。 总之,我想得到一个数组,其中包含目录中最新的X文件

这是我的代码:

    public static function GetPicsDir()
    {
        $results = array();
        $handler = opendir("pics");
        while ($file = readdir($handler)) {
          if ($file != "." && $file != "..") {
            $results[] = $file;
          }
        }
        closedir($handler);
        return $results;
    }
我不知道如何限制它和按时间修改订单。 我很乐意得到任何帮助

谢谢

使用:

你可以用

用于按日期排序排序\u DESC

echo '<pre>';
print_r($result);
echo '<pre>';

如果只想按上次修改日期对文件进行排序,可以使用

不过,这不会告诉您每个文件的日期

如果还想获得修改后的日期,可以使用ftp_rawlist并解析输出。下面是我总结的一个快速示例:


此时,$results包含按上次修改时间升序排序的列表;反转排序函数以获取最新修改的第一种格式的列表。

我多次出现此错误:警告:filemtime():C:\xampp\htdocs\Project\classes\Pics.php中的00a0a75d63ceb4fbc898d1e7e320e129.png的stat失败136@Nero:听起来像是文件编码问题。您可以尝试
filemtime(utf8\u解码($file))取而代之。
$date = strtotime('2013-01-10 10:00:00');//The date from you want to get the files
$matches = glob('dir/*.*');
$result=array();
if (is_array($matches)) {
  $a=0;
  foreach ($matches as $filename) {
    if (filemtime($filename) >= $date) {//only output file >= your $date
      $result[$a]['FileName'] = $filename;
      $result[$a]['DateCreated'] = gmdate("Y-m-d H:i:s", filemtime($filename));
    }
      $a++;
  }
}

if(count($result)>=2){//order array if it has at least 1 match
   foreach ($result as $key => $row) {
      $new_array[$key] = $row['DateCreated'];
    }
 array_multisort($new_array,SORT_DESC,$result);//Show most recent first 
}
echo '<pre>';
print_r($result);
echo '<pre>';
Array
(
  [0] => Array
      (
          [FileName] => test.php
          [DateCreated] => 2013-10-20 05:43:06
      )

  [1] => Array
      (
          [FileName] => test.sql
          [DateCreated] => 2013-09-20 23:38:05
      )

  [2] => Array
      (
          [FileName] => general.php
          [DateCreated] => 2013-09-02 00:58:33
      )

)
ftp_nlist($conn, '-t .');
$list = ftp_rawlist($ftp, '.');

$results = array();
foreach ($list as $line) {
    list($perms, $links, $user, $group, $size, $d1, $d2, $d3, $name) =
        preg_split('/\s+/', $line, 9);
    $stamp = strtotime(implode(' ', array($d1, $d2, $d3)));
    $results[] = array('name' => $name, 'timestamp' => $stamp);
}

usort($results, function($a, $b) { return $a['timestamp'] - $b['timestamp']; });