我正在创建文件并将其名称设置为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按用作文件名的日期和时间排序吗?
1 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
由于像 md5 这样的哈希函数只是单向的,文件名作为排序标准是无用的。如果您想跟踪用于生成 md5 值的同一时间戳,则必须保留一个 hash:timestamp 表记录在案。如果你这样做了,你就不需要开始运行scandir
——你可以简单地从你保存的引用表中读取文件列表。(假设你用删除的文件保持最新。否则,它会显示过时的文件。)
您是否有特殊原因需要使用时间戳的 md5 哈希?为什么不简单地使用时间戳(带有前缀或其他方式)作为文件名?然后您可以简单地按字母顺序、升序或降序排序,并自动按时间顺序排列文件。这将是迄今为止最简单和最轻量级的选择。
如果 md5-hashes 作为文件名是必须的,而编写参考表不是你喜欢的,那么你将不得不循环遍历文件,或者使用 ,usort
并检查文件的创建/修改日期 ( filemtime
)。
- 1 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消