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
Odpowiedz
Począwszy od wydania 5.2, PHP oferuje SplObjectStorage, który oferuje funkcjonalność zestawu Java:
- dba o wyjątkowość (sam obiekt nie może zostać dodany dwukrotnie)
- Łatwy iterację kolekcji
- łatwe do sprawdzenia istnienia obiektu w zbiorze
sprawdź http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage dla przykładu zastosowania
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)
.
- 1. jak znaleźć i zwrócić obiekty w javas hashset
- 2. Czy istnieje odpowiednik AddRange dla HashSet w C#
- 3. Odpowiednik preg_match PHP w Pythonie
- 4. foreach odpowiednik php w jquery?
- 5. Odpowiednik listy PHP() w Pythonie
- 6. JavaScript odpowiednik php mktime
- 7. Odpowiednik JAXB PHP
- 8. Rubinowy odpowiednik PHP $ this
- 9. Składnia brzytwa odpowiednik PHP
- 10. Odpowiednik Perla PHP get_file_contents()?
- 11. Zmiana wartości w HashSet
- 12. Kolizje HashSet w Javie
- 13. HashSet w jednostce testuje
- 14. C# odpowiednik php asocjacyjnej tablicy
- 15. Python: Jaki jest odpowiednik PHP "=="
- 16. PHP: odpowiednik funkcji SUBSTRING_INDEX MySQL?
- 17. Odpowiednik PHP znajomego lub wewnętrznego
- 18. Odpowiednik PHP metody "str.format" Pythona?
- 19. Perlowy odpowiednik języka PHP escapeshellarg
- 20. Jaki jest odpowiednik dekodowania JavaScript w PHP?
- 21. Odpowiednik tabeli mysql_list_tables w PHP PDO?
- 22. Czy istnieje odpowiednik zestawu Java w php?
- 23. Co to jest odpowiednik preg_quote w PHP?
- 24. Odpowiednik funkcji PHP number_format w jQuery/javascript
- 25. Odpowiednik funkcji krypt PHP w Javie
- 26. Curl --resolve odpowiednik w bibliotece PHP CURL
- 27. Czy istnieje odpowiednik języka sqlite3_limit w PHP?
- 28. Odpowiednik PHP dla funkcji parseInt?
- 29. Sortowanie Hashset .Net 3.5
- 30. Tworzenie HashSet dla Doubles
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. –