我想获取目录中的所有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
答案 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
然后,您只需使用该键即可显示文件夹名称旁边的用户日期