web-dev-qa-db-ja.com

PHP配列全体を一意の値にハッシュする

与えられたPHP配列のファイル名セーフなハッシュを生成する方法を探しています。私は現在やっています:

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

...しかし、print_r()を使用して各配列に固有の文字列を生成することは「ハッキング」のように感じます。

これを行うためのよりクリーンな方法のための素晴らしいアイデアはありますか?

[〜#〜] edit [〜#〜]まあ、誰もがシリアル化はタスクに適していると考えているようです。なんで?ハッシュされた後、変数に関する情報を取得することを心配することはありません(一方向ハッシュなので、これは良いことです!)。返信いただきありがとうございます!

37
loneboat

md5(serialize())の代わりにprint_r()を使用します。

print_r()の目的は主にデバッグ関数としてであり、プレーンテキスト表示用にフォーマットされていますが、serialize()はデータベースまたはセッションストレージに永続化するためのコンパクトテキスト文字列として配列またはオブジェクト表現をエンコードします(またはその他の永続化メカニズム)。

69

あるいは、 json_encode を使用することもできます

24
generalhenry

serialize()は正常に動作するはずです。

オブジェクトに__sleepマジックメソッドを呼び出し、PHP全体で使用可能な最もクリーンなシリアル化メソッドである]という追加の利点があります。

9
Pekka 웃

シリアル化はどうですか?

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

6
Damp

型などを保持したい場合は、serialize()を使用する方が保守的かもしれません...

2
greg0ire