Does PHP have built-in data structures?
Solution 1:
The only native data structure in PHP is array. Fortunately, arrays are quite flexible and can be used as hash tables as well.
http://www.php.net/array
However, there is SPL which is sort of a clone of C++ STL.
http://www.php.net/manual/en/book.spl.php
Solution 2:
PHP offers data structures through the Standard PHP Library (SPL) basic extension, which is available and compiled by default in PHP 5.0.0.
The data structures offered are available with PHP 5 >= 5.3.0, and includes:
Doubly Linked Lists
A Doubly Linked List (DLL) is a list of nodes linked in both directions to each others. Iterator’s operations, access to both ends, addition or removal of nodes have a cost of O(1) when the underlying structure is a DLL. It hence provides a decent implementation for stacks and queues.
-
SplDoublyLinkedList class
- SplStack class
- SplQueue class
Heaps
Heaps are tree-like structures that follow the heap-property: each node is greater than or equal to its children, when compared using the implemented compare method which is global to the heap.
-
SplHeap class
- SplMaxHeap class
- SplMinHeap class
- SplPriorityQueue class
Arrays
Arrays are structures that store the data in a continuous way, accessible via indexes. Don’t confuse them with PHP arrays: PHP arrays are in fact implemented as ordered hashtables.
- SplFixedArray class
Map
A map is a datastructure holding key-value pairs. PHP arrays can be seen as maps from integers/strings to values. SPL provides a map from objects to data. This map can also be used as an object set.
- SplObjectStorage class
Source: http://php.net/manual/en/spl.datastructures.php
Solution 3:
PHP 7 introduced an extension called ds
providing specialized data structures as an alternative to the array.
The ds
,
- uses the
Ds\
namespace. - has 3 interfaces namely,
Collection
,Sequence
andHashable
- has 8 classes namely,
Vector
,Deque
,Queue
,PriorityQueue
,Map
,Set
,Stack
, andPair
For more information checkout the Manual and also This blog post has some awesome information including benchmarks.
Solution 4:
The associative array can be used for most basic data structures hashtable, queue, stack. But if you want something like a tree or heap I don't think they exist by default but I'm sure there are free libraries anywhere.
To have an array emulate a stack use array_push()
to add and array_pop()
to take off
To have an array emulate a queue use array_push()
to enqueue and array_shift()
to dequeue
An associative array is a hash by default. In PHP they are allowed to have strings as indexes so this works as expected:
$array['key'] = 'value';
Finally, you can kind of emulate a binary tree with an array with the potential to have wasted space. Its useful if you know you're going to have a small tree. Using a linear array, you say for any index (i) you put its left child at index (2i+1) and right child at index (2i+2).
All of these methods are covered nicely in this article on how to make JavaScript arrays emulate higher level data structures.