首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用scandir获取按时间排序的文件名

使用scandir获取按时间排序的文件名
EN

Stack Overflow用户
提问于 2020-06-02 13:53:23
回答 1查看 108关注 0票数 1

我正在创建文件,并使用time()函数将其名称设置为md5的哈希表示:

代码语言:javascript
运行
复制
$encoded_data = ['some_data'];
$file_name = md5(time()).'.json';
$path = base_path("../some_folder/");
file_put_contents($path.$file_name, $encoded_data); 

我不明白的是,如果我使用scandir和排序顺序参数来获取这些文件:

代码语言:javascript
运行
复制
foreach(array_diff(scandir($path, 1), ['.', '..']) as $file_name) {
    $files[] = base_path('../some_folder/').$file_name;
}

$files数组是否真的会按作为文件名的日期和时间进行排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 17:13:38

因为像md5这样的散列函数是单向的,所以文件名作为排序标准是无用的。如果要跟踪用于生成md5值的同一时间戳,则必须在记录中保留一个散列:时间戳表。如果这样做,您就不需要首先运行scandir --您只需从保存的引用表中读取文件列表。(假设您使用已删除的文件来更新它。否则,它将显示过时的文件。)

您是否需要使用时间戳的MD5-散列?为什么不简单地使用时间戳(前缀或其他)作为文件名?然后,您可以简单地按字母顺序、升序或降序排序,并按时间顺序自动获得文件。到目前为止,这将是最简单和最轻的选择。

如果md5-散列作为文件名是必须的,并且编写引用表不是您想要的,那么您必须遍历这些文件,或者使用usort,并检查文件的创建/修改(filemtime)日期。您可以在sort files by date in PHP的答案中找到解决方案。请注意,这将导致更多的磁盘活动(即使结果被缓存)。

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

https://stackoverflow.com/questions/62153674

复制
相关文章

相似问题

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