私はphpに比較的慣れていないため、使用する適切なデータ構造を理解するのに苦労しています。equals()
クラス FooBar があり、hashCode()
適切に実装されているとしましょう。Java の hashSet に最も似ている php のコレクション (存在する場合) はどれですか? 重複のないオブジェクトのコレクションが必要です。誰かが array と function を使用することを提案しarray_key_exists
ましたが、これを行う別の方法があるかどうか疑問に思っていましたか?
2 に答える
リリース5.2以降、PhpはSplObjectStorageを提供します。これは、Javaのセットの機能を提供します。
- 一意性を重視します(同じオブジェクトを2回追加することはできません)
- コレクションを簡単に繰り返すことができます
- コレクション内のオブジェクトの存在を簡単に確認できます
使用例については、http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorageを確認してください
標準 PHP ライブラリ (SPL) によって提供される PHP プログラミング言語で使用できるデータ構造はほとんどありません。Java Collections Framework の実装と比較すると大したことはありませんが、配列よりも高度な機能を提供することで非常に役立つ場合があります。利用可能なデータ構造のドキュメントは、こちらにあります。
PHP で最も HashSet に似たデータ構造はSplObjectStorageです。
ドキュメントから:
SplObjectStorage クラスは、オブジェクトからデータへのマップ、またはデータを無視してオブジェクト セットへのマップを提供します。この二重の目的は、オブジェクトを一意に識別する必要がある多くの場合に役立ちます。
equals()
PHP のオブジェクトはおよびhashCode()
メソッドを実装しません。オブジェクトの一意性は、関数から返される値によって決定されspl_object_hash()
ます。同じ値が、SplObjectStorage
含まれるオブジェクトを一意に識別するためにクラスによって使用されます。このメソッドを使用して、コレクションSplObjectStorage::getHash($object)
に含まれるオブジェクトの識別子を取得できます。SplObjectStorage