使用filemtime对文件进行排序

时间:2017-10-22 18:39:28

标签: php sorting filemtime

我有一个php文件,可以从图像目录中生成图库。

我想按修改日期对图像进行排序。

我尝试使用filemtime函数,然后使用以下代码对函数进行排序:

<?php
  $src_folder = 'gallery';  
  $src_files = scandir($src_folder); 

  function filetime_callback($a, $b) {
    if (filemtime($src_folder.'/'.$a) === filemtime($src_folder.'/'.$b)) return 0;
    return filemtime($src_folder.'/'.$a) > filemtime($src_folder.'/'.$b) ? -1 : 1; 
  }

  $files = array();
  usort($files, "filetime_callback");

  foreach($src_files as $file) {
   echo $file . ' - ' . date ("F d Y H:i:s.", filemtime($src_folder.'/'.$file)) . '<br>';
  }
?>

,输出如下:

image01.jpg - October 22 2017 19:40:02.
image02.jpg - October 22 2017 19:39:19.
image03.jpg - October 22 2017 19:39:23.
image04.jpg - October 22 2017 19:39:28.

未按修改日期排序。我不是php程序员,所以我无法找到解决方案。

如何让我的代码工作?感谢。

2 个答案:

答案 0 :(得分:1)

这是否适合您?

function scan_dir($dir) {
      $ignored = array('.', '..', '.svn', '.htaccess');
      $files = array();
      foreach (scandir($dir) as $file) {
          if (in_array($file, $ignored))  {
              continue;
          }
          $filemtime = filemtime($dir . '/' . $file);
          $files[$file] = $filemtime;
      }

      arsort($files);
      $files = array_keys($files);

      return ($files) ? $files : false;
  }

  $src_folder = 'gallery';

  $files = scan_dir($src_folder);

  foreach($files as $file) {
      echo $file . ' - ' . date ("F d Y H:i:s.", filemtime($src_folder.'/'.$file)) . '<br>';
  }

答案 1 :(得分:0)

变量作用域是您的问题,{file =_callback函数的上下文中未定义$src_folder

请勿在开发环境中禁用错误​​报告。

另一个问题是你没有对正确的数组进行排序。您正在创建一个空数组$ files,然后尝试对其进行排序,而不是$ src_files数组。