PHP按创建日期排序foldername

时间:2018-02-14 13:54:36

标签: php directory

我想获取目录中的所有foldernames并按创建日期排序。 现在我使用以下代码获取目录中的所有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;

       }
    }
}

它显示所有foldername,但不显示创建日期。

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

2 个答案:

答案 0 :(得分:2)

使用路径参数glob()Userfiles/*标记调用GLOB_ONLYDIR来访问子目录。

然后调用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()

答案 1 :(得分:0)

我稍微修改了你的代码,下面的方法利用了数组键,无需创建对象或多维数组来包含其他数据。

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

$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

然后,您只需使用该键即可显示文件夹名称旁边的用户日期