2012-02-29 4 views
7

PHPの配列キーに何らかの制限がある場合は?長さ?許容されない文字列ですか?PHP連想配列のキー(インデックス)の制限?

official documentationには、これだけが見つかりましたが、キーの制限に関する情報はありません。

キーは、整数または文字列のいずれかです。キーが整数の標準表現である場合、それはそのように解釈される(すなわち、「8」は「8」と解釈され、「08」は「08」と解釈される)。 keyのfloatは整数に切り捨てられます。索引付けされた連想配列型の両方整数と文字列インデックスを含むことができるPHPで同じタイプである。*

答えて

4

What is the max key size for an array in PHP?

この質問はほぼ全く同じです。しかし、非公式のものを信用したくない場合は、小さなキーの使用を控えてください。あなたはそれからいくつかのパフォーマンス上の利点を得るかもしれません。

EDIT:そしてThe PHP Manualと言う:

注:文字列が非常に大きくなっても問題ありません。 PHPでは、文字列のサイズに境界がありません。唯一の制限は、PHPが動作しているコンピュータの利用可能なメモリです。

+0

は素晴らしいですね。私はいくつかの特定のデータ処理のために長いキーが必要なので、パフォーマンス、機能だけの問題はありません。 「禁じられた」文字もないかどうかを確認する必要があります。それは質問の第二の部分です。 –

+1

文字列に禁止文字がありません。しかし、文字列中のバックスラッシュを認識することは、次の文字をエスケープするためです。 – MichaelH

+1

PHPドキュメントの "長い文字列に問題はありません"という注釈を引用しています。これは必ずしも配列内の長いキーがパフォーマンスやその他の理由で問題にならないことを意味するわけではありません。それは当てはまるかもしれませんが、その引用された注釈はそれを言っていません。 – matteo

9

配列のキーとして使用される文字列はすべてハッシュされます。 md5()およびsha1()と同様に、このハッシュは、(潜在的にギガバイトの)文字を既知の長さに減らします。 md5()やsha1()とは異なり、配列の内部ハッシングメカニズムは文字列を整数に変換し、配列内のバケットのアドレス指定に使用することができます。 PHPの配列は真実の配列ではありません。内部的にリンクされたHashMapです。複数の文字列が同じハッシュにまで下げられることを考慮すると、各バケットはリストそのものです。同じバケット内に複数の要素がある場合は、各キーを評価する必要があります。短いキーが1MBのテキストよりも速く比較されることは言うまでもない。

TL; DR:PHPに制限されていませんが、自分自身を制限する必要があります。かなり長い文字列がある場合は、キーの長さを減らすためにmd5()またはsha1()(または実際には他のハッシュ関数)を使用して文字列を実行することを検討してください。

+0

内部でハッシュされているキーは分かりませんでした。実際、キーの長さを減らすためにmd5を追加することをお勧めします。 –

+2

あなたは矛盾していますか?文字列が内部的にハッシュされている場合、「かなり長い」文字列をハッシュする必要があるのはなぜですか?あなたは、統一性の理論的保証を失うことは言うまでもなく(あなたは何をしていますか?リストなどでデータ構造全体を再構成しますか?)TL; DR部分は最初のパラグラフと矛盾しているようですが、その背後にある。 – matteo

-2

あなたは本当にキーを参照していますか?あなたは価値を意味しますか?連想配列と

: $配列=新しいアレイ( 新しいアレイ( "キー" => "値" ) )。用として、あなたは彼らに多くのことをreusreしたいと思うならば、私はtheorieには制限が長さにありませんだと思うキーのようしかし...長いキーを択一することは良いアイデアではありません

..

あなただけの一般的な配列で戦利品を取る必要があり、どのようなデータ型許さとかされている値..このことができます

希望..

関連する問題