Tôi tương đối mới đối với php và gặp khó khăn trong việc tìm ra cấu trúc dữ liệu phù hợp để sử dụng. Giả sử tôi có một lớp FooBar với equals()
và hashCode()
được triển khai đúng cách. Những loại bộ sưu tập trong php (nếu có bất kỳ ở tất cả) mà hầu hết tương tự như hashSet của Java? Tôi cần một bộ sưu tập các đối tượng không có bản sao. Đề nghị của ai đó sử dụng mảng và chức năng array_key_exists
, nhưng tôi đã tự hỏi liệu có cách nào khác để làm điều này không?Tương đương HashSet của Java trong PHP
Trả lời
Bắt đầu từ phiên bản 5.2 Php cung cấp SplObjectStorage, cung cấp các chức năng của Set Java:
- Cares về tính độc đáo (giống đối tượng không thể được thêm hai lần)
- Dễ lặp thông qua bộ sưu tập
- Dễ dàng kiểm tra sự tồn tại của một đối tượng trong bộ sưu tập
Kiểm tra http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage ví dụ về sử dụng
Có vài cấu trúc dữ liệu có sẵn trong ngôn ngữ lập trình PHP được cung cấp bởi Thư viện PHP chuẩn (SPL). Mặc dù chúng không là gì khi so sánh với việc triển khai khung công tác Java Collections, đôi khi chúng có thể rất hữu ích bằng cách cung cấp một chức năng nâng cao hơn so với các mảng. Bạn có thể tìm thấy tài liệu về các cấu trúc Dữ liệu có sẵn here.
Cấu trúc dữ liệu giống nhất của HashSet trong PHP sẽ là SplObjectStorage.
Từ các tài liệu:
Lớp SplObjectStorage cung cấp một bản đồ từ các đối tượng dữ liệu hoặc, bằng cách bỏ qua dữ liệu, một bộ đối tượng. Mục đích kép này có thể hữu ích trong nhiều trường hợp liên quan đến sự cần thiết phải xác định duy nhất các đối tượng.
Đối tượng trong PHP không triển khai các phương thức equals()
và hashCode()
. Tính duy nhất của các đối tượng được xác định bởi giá trị được trả về từ hàm spl_object_hash()
. Giá trị tương tự được sử dụng bởi lớp SplObjectStorage
để xác định duy nhất các đối tượng chứa trong đó. Có thể sử dụng phương thức SplObjectStorage::getHash($object)
để truy xuất mã định danh của đối tượng có trong bộ sưu tập SplObjectStorage
.
- 1. Java tương đương với preg_replace_callback của PHP
- 2. Scala tương đương với HashSet mới (Collection)
- 3. Java tương đương với php chết
- 4. Có tương đương AddRange cho một HashSet trong C#
- 5. PHP tương đương với Character.getNumericValue của Java (char c)?
- 6. Tương đương TreeSet của Java tương đương với Python?
- 7. java của() tương đương trong python
- 8. Tương đương Python của compareTo của Java()
- 9. Javascript tương đương với strtotime của php()?
- 10. Ruby tương đương với $ của PHP $
- 11. Perl tương đương với escapeshellarg của PHP
- 12. Perl tương đương với preg_callback của PHP
- 13. Perl tương đương với get_file_contents của PHP()?
- 14. Javascript tương đương với urldecode của php()
- 15. Đi tương đương với 'implode' của PHP
- 16. Python tương đương với memory_get_usage() của PHP?
- 17. DebugBreak tương đương trong Java?
- 18. Tương đương Sprintf trong Java
- 19. Tương đương DataTable trong Java
- 20. C# tương đương với charAt của Java()?
- 21. Tương đương Java cho str.strip của Python()
- 22. Tương đương Java của cin (C++)
- 23. Java tương đương với struct.pack của Python?
- 24. Java tương đương với PHP var_dump là gì?
- 25. .NET tương đương với List.subList của Java()?
- 26. Java Tương đương với DateTime.Parse của .NET?
- 27. Java tương đương với String.match JavaScript của()
- 28. Tương đương Java 1.4.2 của Pattern.quote()
- 29. Có tương đương Java của SignalR không?
- 30. ASP.Net tương đương với file_get_contents của PHP ('php: // input');
Mảng sẽ là con đường để đi. Bạn có thể sử dụng hàm array_unique của PHP để trích xuất một mảng không trùng lặp hoặc sử dụng array_key_exists trước khi chèn. –