2011-02-23 41 views
31

尋找一種方法來產生給定PHP數組的文件名安全散列。目前,我正在做的:將整個PHP數組散列到唯一值中

$filename = md5(print_r($someArray, true)); 

...但感覺「哈克」使用的print_r()來生成唯一的每個陣列的字符串。

任何明智的想法,一個更清潔的方式來做到這一點?

編輯 好吧,似乎每個人都認爲serialize更適合這項任務。任何理由?我並不擔心它會在散列後檢索有關變量的信息(這很好,因爲它是單向散列!)。謝謝你的回覆!

+1

我覺得這是做的一個相當不錯的方式,其實。 – Dutchie432 2011-02-23 21:54:10

+0

我會說這兩種方式同樣有效。但是,考慮到它們之間的差異,作爲使用序列化而不是print_r的原則,看起來更爲正確。但是,只有當你像我這樣的程序員OCD。 :) – OCDev 2016-09-27 09:51:29

回答

51

使用md5(serialize())而不是print_r()

print_r()的目的主要是作爲調試功能,並進行格式化以純文本顯示,而serialize()編碼數組或對象表示作爲在數據庫或會話存儲持久性的緊湊的文本字符串(或任何其他持久性機制)。

+0

感謝您的回答。序列化的任何原因會更好嗎? – loneboat 2011-02-23 21:56:19

+0

謝謝!標記爲已回答。 – loneboat 2011-02-24 04:29:23

+0

很想看到這種方法的一些基準,它是替代方案。 – 2013-05-22 15:10:06

6

serialize()應該可以正常工作。

它具有對對象調用__sleep神奇方法的額外優勢,並且是PHP中整體可用的最清晰的序列化方法。

+0

感謝您的輸入! – loneboat 2011-02-23 22:09:32

2

,如果你想保持型等使用serialize()可能是較爲保守......

5

什麼連載?

$filename = md5(serialize($someArray));