PHP获取foldername按创建日期排序
我想得到目录中的所有文件夹名,并按创建日期排序。 现在,我使用以下代码获取目录中的所有fodernamesPHP获取foldername按创建日期排序,php,directory,Php,Directory,我想得到目录中的所有文件夹名,并按创建日期排序。 现在,我使用以下代码获取目录中的所有fodernames $path = 'userfiles'; $dirs = array(); // directory handle $dir = dir($path); while (false !== ($entry = $dir->read())) { if ($entry != '.' && $entry != '..') { if (is_dir($p
$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
使用路径参数
Userfiles/*
和glob\u ONLYDIR
标志调用glob()
,访问子目录
然后调用usort()
并按ASC顺序对目录进行排序。
*如果您想让它们按描述顺序排列,只需将函数参数切换到$b,$a
$directories=glob('Userfiles/*',GLOB_ONLYDIR);
usort($directories, function($a,$b){ return filemtime($a) - filemtime($b); });
var_export($directories);
此外,如果您当前的工作目录(脚本所在的位置)位于“Userfiles”中,则您只需要以下内容:glob('*',glob_ONLYDIR)
,并且输出将为,例如:
array ( 0 => 'My Folder', 1 => 'My Folder 2', )
如果您不在CWD中,请在调用glob()
之前调用chdir()
移动
p、 在PHP7.4及以上版本中,您可以使用箭头函数语法:
usort($directories, fn($a, $b) => filemtime($a) <=> filemtime($b)); // sort ASC
usort($directories,fn($a,$b)=>filemtime($a)filemtime($b));//分类ASC
我稍微修改了您的代码,下面的方法利用了数组键,无需创建对象或多维数组来包含其他数据
在这里,我们将最后修改的日期作为一个整数,并将其用作每个条目/文件夹名称的键,然后使用这些键对数组进行排序,为了清晰起见,我添加了一些注释
$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
然后,您可以使用该键在文件夹名称旁边显示用户日期此链接可能有助于您对文件夹进行排序,请尝试使用usort实现此目的。$myarray=glob(“用户文件”);usort($myarray,function($a,$b){returnfilemtime($a)-filemtime($b);});打印(myarray);我试过上面的代码,但不起作用。。