2012-05-16 15 views
5

Jestem względnie nowym użytkownikiem php i mam problem z określeniem odpowiedniej struktury danych do użycia. Załóżmy, że mam poprawnie zaimplementowaną klasę FooBar z equals() i hashCode(). Jakiego rodzaju kolekcja w php (jeśli w ogóle istnieje) najbardziej przypomina Java hashSet? Potrzebuję kolekcji obiektów bez duplikatów. Ktoś zasugerował użycie tablicy i funkcji array_key_exists, ale zastanawiałem się, czy jest inny sposób na zrobienie tego?Odpowiednik Java's HashSet w PHP

+0

Tablice będą właściwą drogą. Możesz użyć funkcji array_unique PHP, aby wyodrębnić tablicę bez duplikatów lub użyć array_key_exists przed wstawieniem. –

Odpowiedz

2

Dostępnych jest kilka struktur danych w języku programowania PHP udostępnianym przez standardową bibliotekę PHP (SPL). Chociaż są one niczym w porównaniu z implementacjami Java Collections Framework, czasami mogą być bardzo przydatne, zapewniając bardziej zaawansowaną funkcjonalność niż te tablice. Możesz znaleźć dokumentację dostępnych struktur danych here.

Najbardziej podobną do HashSet strukturą danych w PHP byłaby SplObjectStorage.

Z dokumentacji:

Klasa SplObjectStorage zapewnia mapę z obiektami do danych lub poprzez ignorowanie danych, to zbiór obiektów. Ten podwójny cel może być przydatny w wielu przypadkach związanych z koniecznością jednoznacznego identyfikowania obiektów.

Obiekty w PHP nie implementują metod equals() i hashCode(). Unikalność obiektów jest określona przez wartość zwróconą przez funkcję spl_object_hash(). Ta sama wartość jest używana przez klasę SplObjectStorage do jednoznacznej identyfikacji obiektów, które zawiera. Do pobrania identyfikatora obiektu zawartego w kolekcji SplObjectStorage można użyć metody SplObjectStorage::getHash($object).