我正在創建文件并將其名稱設置為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 關注
- 247 瀏覽
添加回答
舉報
0/150
提交
取消