队列是很常见的一个数据机构,通常我们在PHP中使用队列的时候会用数组来模拟一个队列。主要是array_push() array_shift()数组。
array_push() 在数组末尾插入一个元素。array_shift() 删除数组开头的元素,并返回被删除的元素。用这2个数组方法就可以模拟一个先进先出的队列。
$queue = array();array_push($queue,'a');array_push($queue,'b');// print_r($queue); Array ( [0] => a [1] => b )// echo "<br>";$res = array_shift($queue);// print_r($res); a// echo "<br>";// print_r($queue); Array ( [0] => b )die;
我们往队列($queue)中先后插入两个元素 "a"和"b",然后再取出数据的时候取的是先插进去的"a",符合队列先进先出的特性,这样我们就模拟了一个队列操作。
其实,除了用数组模拟队列的方法。PHP提供了队列数据的标准库SplQueue。
具体实现如下所示:
$queue = new SplQueue();$queue->enqueue('a');$queue->enqueue('b');// print_r($queue); SplQueue Object ( [flags:SplDoublyLinkedList:private] => 4 [dllist:SplDoublyLinkedList:private] => Array ( [0] => a [1] => b ) )// echo "<br>";$res = $queue->dequeue();// print_r($res); a// echo "<br>";// print_r($queue); SplQueue Object ( [flags:SplDoublyLinkedList:private] => 4 [dllist:SplDoublyLinkedList:private] => Array ( [0] => b ) )die;
直接实例化 SplQueue()对象即可获得一个队列。
SplQueue提供了enqueue()方法入队;dequeue()方法出队。
队列元素是存在 SplDoublyLinkedList属性里的。
需要注意的是,SplQueue除了提供了入队\出队两个方法外,还有其他的一些方法。例如常见的pop() push() current() count()等。
如果用pop()\push()方法来插入\取出数据的话,将是一个堆栈的数据结构,而不是队列。即数据是先进后出。
$q = new SplQueue();$q->push(1);$q->push(2);$q->push(3);$q->pop();print_r($q);Above code returns:SplQueue Object( [flags:SplDoublyLinkedList:private] => 4 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 1 [1] => 2 ))Note that 3 got popped and *not* 1.
the end~