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

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


$encoded_data = ['some_data'];

$file_name = md5(time()).'.json';

$path = base_path("../some_folder/");

file_put_contents($path.$file_name, $encoded_data); 

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


foreach(array_diff(scandir($path, 1), ['.', '..']) as $file_name) {

    $files[] = base_path('../some_folder/').$file_name;

}

数组真的会$files按用作文件名的日期和时间排序吗?


婷婷同学_
浏览 209回答 1
1回答

繁花如伊

由于像 md5 这样的哈希函数只是单向的,文件名作为排序标准是无用的。如果您想跟踪用于生成 md5 值的同一时间戳,则必须保留一个 hash:timestamp 表记录在案。如果你这样做了,你就不需要开始运行scandir——你可以简单地从你保存的引用表中读取文件列表。(假设你用删除的文件保持最新。否则,它会显示过时的文件。)您是否有特殊原因需要使用时间戳的 md5 哈希?为什么不简单地使用时间戳(带有前缀或其他方式)作为文件名?然后您可以简单地按字母顺序、升序或降序排序,并自动按时间顺序排列文件。这将是迄今为止最简单和最轻量级的选择。如果 md5-hashes 作为文件名是必须的,而编写参考表不是你喜欢的,那么你将不得不循环遍历文件,或者使用 ,usort并检查文件的创建/修改日期 ( filemtime)。
打开App,查看更多内容
随时随地看视频慕课网APP