PHP初学者在这里;这是一个非常基本的问题,我在搜索后找不到关于SE的简单解释或示例。
由于barmar指出的问题而编辑。
我有一个包含大量文件的目录,即
2018-03-21-file-name.php
2018-07-04-file-name-too.php
2018-05-30-another-file-name.php
2018-07-04-file-too.php
... more
文件名中的数字字符串是yyyy-mm-dd格式的日期。某些文件可能具有相同的日期。
我正在使用glob创建这些文件的数组
$files = (glob("*.php"));
var_dump
向我展示了结果:
[0]=> string(18) "2018-03-21-file-name.php"
[1]=> string(22) "2018-07-04-file-name-too.php"
[2]=> string(25) "2018-05-30-another-file-name.php"
... more
这些文件自然是按glob的数字顺序排序的;但我想按月份对文件进行排序。但为了做到这一点,我认为我需要从每个文件名中提取月份号,并将其插入到每个相应文件名的$files
数组中。
那么,如何从每个文件中获取月份编号并将其添加到数组中,以便可以将这些文件按月份分组?
这是我之前的问题Glob files and sort by filemtime and into months,我在jQuery accordion的标记中按文件修改日期的月份和日期排序,但我发现使用filemtime
有问题,所以我需要更改为按实际文件名中的日期排序。
也就是说,
$files = (glob("*.php"));
krsort($files);
foreach ...
发布于 2018-06-22 08:07:04
最好的方法可能是定义自己的排序函数,并像这样使用usort()
:
$glob = ['03-05-18-file-name.php',
'30-11-18-file-name-too.php',
'21-08-18-another-file-name.php'];
function cmp($a, $b)
{
$month_a = substr($a,3,2);
$month_b = substr($b,3,2);
if ($month_a == $month_b) {
return 0;
}
return ($month_a < $month_b) ? -1 : 1;
}
usort($glob, "cmp");
print_r($glob);
请注意,所有月份都组合在一起。如果要分隔年份或天数,则需要修改cmp
函数。
https://stackoverflow.com/questions/50978886
复制相似问题