Collections provides a set of collection types loosely inspired by the .NET runtime and the C++ standard template library.
PHP has long been lacking formal, performant collection types. The addition of the heap-centric collections to the SPL has gone some way to addressing this problem but has fallen short in some regards. For example, SplDoublyLinkedList does not expose some of the operations that linked lists are designed to solve efficiently, such as insertion and deletion operations in the middle of the collection. There are also several broken abstractions. One example is SplQueue which exposes methods for manipulating both the head and tail of the queue.
- Collection: A collection is an object that stores other objects (called elements).
- Mutable Collection: A mutable collection is a collection on which elements can be added and removed.
- Iterable: Iterable collections allow sequential access to the elements without modifying the collection.
- Mutable Iterable: An iterable collection that can be modified in place.
- Sequence: A sequence is a variable-sized collection whose elements are arranged in a strict linear order.
- Mutable Sequence: A sequence that supports insertion and removal of elements.
- Random Access Sequence: A sequence that provides access to elements by position.
- Mutable Random Access Sequence: A sequence that allows insertion & removal of elements by position.
- Associative Collection: A variable-sized collection that supports efficient retrieval of values based on keys.
- Mutable Associative Collection: An associative collection that supports insertion and removal of elements.
- Queued Access: A F/LIFO buffer (ie, stacks and queues).
- Set: Un-ordered, iterable collection with unique elements.
- Vector: A mutable sequence with efficient access by position and iteration.
- LinkedList: A mutable sequence with efficient addition and removal of elements.
- Map: Associative collections with efficient access by key.
- Set: Iterable collections with unique elements.
- Queue: A first-in/first-out (FIFO) queue of elements.
- PriorityQueue: A prioritized first-in/first-out (FIFO) queue of elements.
- Stack: A last-in/first-out (LIFO) stack of elements.
- AssociativeIterator: An iterator for iterating any associative collection.
- RandomAccessIterator: An iterator for iterating any random access collection.
- SequentialKeyIterator: An iterator adaptor for producing sequential integer keys.
The provided collection types support serialization, so long as the elements contained within the collection are also serializable.
The provided collection implementations support cloning. Cloning a collection produces a copy of the collection containing the same elements. The elements themselves are not cloned.