2012-05-16 39 views
5

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()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

+0

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. –

Trả lời

3

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

2

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()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.

Các vấn đề liên quan