当前位置:首页>php>PHP标准库之SplQueue

PHP标准库之SplQueue

  • 2026-09-02 20:31:10
PHP标准库之SplQueue

队列是很常见的一个数据机构,通常我们在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~

最新文章

随机文章