首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将每个文件名的一部分添加到由glob生成的数组中?

如何将每个文件名的一部分添加到由glob生成的数组中?
EN

Stack Overflow用户
提问于 2018-06-22 07:54:24
回答 1查看 123关注 0票数 2

PHP初学者在这里;这是一个非常基本的问题,我在搜索后找不到关于SE的简单解释或示例。

由于barmar指出的问题而编辑。

我有一个包含大量文件的目录,即

代码语言:javascript
复制
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向我展示了结果:

代码语言:javascript
复制
[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有问题,所以我需要更改为按实际文件名中的日期排序。

也就是说,

代码语言:javascript
复制
$files = (glob("*.php"));

krsort($files);

foreach ...
EN

回答 1

Stack Overflow用户

发布于 2018-06-22 08:07:04

最好的方法可能是定义自己的排序函数,并像这样使用usort()

代码语言:javascript
复制
$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函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50978886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档