2013-07-18 44 views
5

Tôi đã nhìn thấy rất nhiều câu hỏi về chủ đề này, nhưng không có câu hỏi nào trong số đó đề cập đến trường hợp của tôi.PHP với Spl DataStructures thay thế cho mảng đa chiều

Tôi đang xây dựng một module ACL dựa trên 5 lớp:

  1. Vai trò
  2. Privilege
  3. Nhóm
  4. Wrapper (đoán những gì nó làm ..) Nhà máy cho Privilege, Vai trò và Nhóm các lớp học
  5. Lưu trữ Danh sách truy cập cho các nhóm/vai trò (dựa trên cách sử dụng và trường hợp)

Tôi đang nghĩ đến việc sử dụng SplQueue để lưu trữ các mức đặc quyền (chủ yếu cho các đặc quyền thừa hưởng) Vì vậy, tôi đang nghĩ đến việc sử dụng một đối tượng duy nhất để lưu trữ mọi thứ và không nghĩ rằng mảng đa chiều bình thường sẽ là lựa chọn tốt nhất. Luồng sẽ giống như this paste, là TL; DR .. Xin lỗi về điều đó.

Câu hỏi của tôi là SplQueue có quá mức cần thiết trong trường hợp của tôi không?

Tôi có nên sử dụng và thay thế Cấu trúc dữ liệu Spl hay không và nếu có thì sao?

EDIT Vâng, tôi không thể nghĩ ra một ví dụ tốt về việc sử dụng, vì vậy cho phép giữ đến GBAC UNIX dựa.

+0

Cấu trúc dữ liệu phải hỗ trợ các trường hợp sử dụng cho các thao tác được thực hiện trên đó. Bạn đã không đề cập đến bất kỳ người trong số họ. – Sven

+0

Vâng mục đích là chung, cho tôi một giây để viết nó và sẽ cập nhật trong một giây –

+3

Tôi nghĩ rằng điều này thực sự là quá mức cần thiết cho các mảng nhỏ. (nhỏ là dưới 100-1000 yếu tố). Hashmap nội bộ cung cấp truy cập đủ nhanh chủ yếu. SPL là tốt khi bạn thực sự cần đăng nhập (n) truy cập và chèn lần vv – bwoebi

Trả lời

4

Nếu bạn muốn lưu trữ dữ liệu của mình trong biểu mẫu đối tượng thì hãy sử dụng SplObjectStorage. Các SplQueue sẽ overkill cho mảng nhỏ.

SplQueue hoạt động trên FIFO.

Vì vậy, bạn không thể truy cập trực tiếp đến người cuối hoặc gần người cuối cùng và sẽ mất thời gian.

Thay vì SplQueue Tôi sẽ đề nghị bạn sử dụng Mảng vì bạn có thể truy cập bất kỳ phần tử nào trực tiếp theo chỉ mục mảng.

Bạn cũng có thể kiểm tra câu trả lời của câu hỏi này: Associative Array versus SplObjectStorage

Ngoài ra bạn có thể kiểm tra hiệu suất của SPLobjectStorage và mảng, here is the code.

Để biết thêm read here.

SplObjectStorage chắc chắn được chia tỷ lệ tuyến tính. Hiệu suất mảng là ít có thể dự đoán (độ lệch chuẩn lớn hơn) với các tập dữ liệu nhỏ hơn. Và SplObjectStorage thực sự là một giải pháp tốt hơn để lưu trữ rất nhiều đối tượng trong một tập hợp.

Vì vậy, nếu dữ liệu của bạn nhỏ thì bạn nên sử dụng mảng nếu không sử dụng SplObjectStorage cho lượng lớn dữ liệu.

+1

Mảng có bất kỳ hạn chế nào nếu dữ liệu lớn hơn, để làm rõ: 20 vai trò trong tổng số, 6 Nhóm và 1 Số nhận dạng trang (số nhận dạng trang được sử dụng để xác định một phần cụ thể của ứng dụng) 6x1 - Định nghĩa nhóm và định nghĩa trong nhóm * (6x1) x20 * (Ít nhất với kiến ​​trúc/đầu của tôi) có kết quả trong 120 định nghĩa trong bộ nhớ sẽ tăng lên đáng kể trong 100 trang ứng dụng. Có thể có bất kỳ hạn chế nếu tôi đi với mảng hoặc SplObjectStorage. Cảm ơn! –

+0

@DaGhostmanDimitrov nếu bạn có gần 120 dữ liệu thì bạn có thể sử dụng mảng và nếu bạn có hàng nghìn bản ghi thì hãy sử dụng SplObjectStorage như tôi đã thêm các liên kết trong câu trả lời. bạn có thể thấy các vấn đề hiệu suất sẽ đến trong mảng cho dữ liệu lớn và cho dữ liệu nhỏ, hiệu suất của SplObjectStorage sẽ là xấu sau đó mảng. bây giờ nó phụ thuộc vào dữ liệu của bạn. –

+0

Tư vấn cho tôi: Tôi nên tiếp cận phương pháp nào? Sử dụng mảng và làm cho cấu trúc dữ liệu sẵn sàng hoặc dữ liệu sẵn sàng cao (không thể nghĩ ra những từ tốt hơn o nói nó xin lỗi, tiếng anh không phải là của tôi) –

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