【问题标题】:PHP get foldername sort by created datePHP获取按创建日期排序的文件夹名称
【发布时间】:2018-02-14 13:54:35
【问题描述】:

我想获取目录中的所有文件夹名称并按创建日期排序。 现在我正在使用以下代码来获取目录中的所有 fodernames。

$path = 'userfiles';
$dirs = array();
// directory handle
$dir = dir($path);

while (false !== ($entry = $dir->read())) {
    if ($entry != '.' && $entry != '..') {
       if (is_dir($path . '/' .$entry)) {
            $dirs[] = $entry;

       }
    }
}

它显示所有文件夹名称,但不显示创建日期。

Userfiles
-->My Folder
-->My Folder 2

【问题讨论】:

  • 此链接可能会帮助您对文件夹进行排序stackoverflow.com/questions/20930122/sort-glob-by-creation-date
  • 尝试使用 usort 来实现。
  • $myarray = glob("userfiles"); usort($myarray, function($a,$b){ return filemtime($a) - filemtime($b); }); print_r($myarray);
  • 我尝试了上面的代码但没有工作..

标签: php directory


【解决方案1】:

通过使用Userfiles/* 的路径参数和GLOB_ONLYDIR 标志调用glob() 来访问子目录。

然后调用usort() 并按ASC 顺序对目录进行排序。 *如果要按DESC顺序,只需将函数参数切换到$b,$a即可。

$directories=glob('Userfiles/*',GLOB_ONLYDIR);
usort($directories, function($a,$b){ return filemtime($a) - filemtime($b); });
var_export($directories);

另外,如果您当前的工作目录(您的脚本所在的位置)在“用户文件”中,那么您只需要这个:glob('*',GLOB_ONLYDIR),输出将是例如:

array ( 0 => 'My Folder', 1 => 'My Folder 2', )

如果您不在 CWD 中,请先致电 chdir() 移动,然后再致电 glob()

附言从 PHP7.4 及以上,您可以使用箭头函数语法:

usort($directories, fn($a, $b) => filemtime($a) <=> filemtime($b));  // sort ASC

【讨论】:

    【解决方案2】:

    我对你的代码做了一些修改,下面的方法利用了数组键,无需创建对象或多维数组来包含额外的数据。

    在这里,我们以整数形式获取最后修改日期并将其用作每个条目/文件夹名称的键,然后使用键对数组进行排序,为了清楚起见,我添加了一些 cmets。

    $path = 'absolute/path/to/folder';
    $dirs = array();
    $dir = dir($path);
    while (false !== ($entry = $dir->read())) {
        if ($entry != '.' && $entry != '..') {
            $fullpath = $path . $entry;
    
            $time = @filemtime($fullpath);//This will fail on systems not using ISO-8859-1 for encoding
            if(!$time)//if NULL
                $time = filemtime(utf8_decode($fullpath));//Convert encoding to ISO-8859-1
    
            if ( is_dir($fullpath) )
                $dirs[$time] = $entry;//Use last modified time as key to this array
        }
    }
    //Then just sort by keys below
    ksort($dirs);//from old to new
    krsort($dirs);//from new to old
    

    然后,您可以使用该键在文件夹名称旁边显示用户日期

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多