php标准库中QplQueue队列如何使用?

时间:2023-11-28 18:23:32

php标准库中QplQueue队列如何使用?

一、总结

1、new对象,然后通过enqueue方法和dequeue方法使用。

二、php标准库中QplQueue队列如何使用?

队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO)。

php标准库中QplQueue队列如何使用?

PHP SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现。

 $queue = new SplQueue();

  /**
* 可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:
* (1)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP (默认值,迭代后数据保存)
* (2)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE (迭代后数据删除)
*/
$queue->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE); //SplQueue::enqueue()其实就是 SplDoublyLinkedList::push()
$queue->enqueue('a');
$queue->enqueue('b');
$queue->enqueue('c'); //SplQueue::dequeue()其实就是 SplDoublyLinkedList::shift()
print_r($queue->dequeue()); foreach($queue as $item) {
echo $item . PHP_EOL;
} print_r($queue);

三、php参考手册

简介

SplQueue 类通过使用一个双向链表来提供队列的主要功能。

类摘要

 SplQueue extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
/* 方法 */
__construct ( void )
mixed dequeue ( void )
void enqueue ( mixed $value )
void setIteratorMode ( int $mode )
/* 继承的方法 */
public void SplDoublyLinkedList::add ( mixed $index , mixed $newval )
public mixed SplDoublyLinkedList::bottom ( void )
public int SplDoublyLinkedList::count ( void )
public mixed SplDoublyLinkedList::current ( void )
public int SplDoublyLinkedList::getIteratorMode ( void )
public bool SplDoublyLinkedList::isEmpty ( void )
public mixed SplDoublyLinkedList::key ( void )
public void SplDoublyLinkedList::next ( void )
public bool SplDoublyLinkedList::offsetExists ( mixed $index )
public mixed SplDoublyLinkedList::offsetGet ( mixed $index )
public void SplDoublyLinkedList::offsetSet ( mixed $index , mixed $newval )
public void SplDoublyLinkedList::offsetUnset ( mixed $index )
public mixed SplDoublyLinkedList::pop ( void )
public void SplDoublyLinkedList::prev ( void )
public void SplDoublyLinkedList::push ( mixed $value )
public void SplDoublyLinkedList::rewind ( void )
public string SplDoublyLinkedList::serialize ( void )
public void SplDoublyLinkedList::setIteratorMode ( int $mode )
public mixed SplDoublyLinkedList::shift ( void )
public mixed SplDoublyLinkedList::top ( void )
public void SplDoublyLinkedList::unserialize ( string $serialized )
public void SplDoublyLinkedList::unshift ( mixed $value )
public bool SplDoublyLinkedList::valid ( void )
}

Table of Contents

实例

 <?php

 $queue = new SplQueue();
$queue->enqueue('A');
$queue->enqueue('B');
$queue->enqueue('C'); $queue->rewind();
while($queue->valid()){
echo $queue->current(),"\n";
$queue->next();
} print_r($queue);
$queue->dequeue(); //remove first one
print_r($queue); ?>
Output A
B
C
SplQueue Object
(
[flags:SplDoublyLinkedList:private] => 4
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => A
[1] => B
[2] => C
) )
SplQueue Object
(
[flags:SplDoublyLinkedList:private] => 4
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => B
[1] => C
) )

四、测试题-简答题

1、SplQueue是通过什么来实现的?

解答:双向链表,所以双向链表有的方法它全有。继承双链表(SplDoublyLinkedList)。

2、SplQueue如何使用?

解答:new一个SplQueue对象出来,然后用入队出队方法就可以轻松使用。

3、SplQueue的入队出队方法是什么?

解答:enqueue和dequeue。

4、SplQueue对象如何操作enqueue和dequeue方法?

解答:因为是php类对象,所以操作方法用->符号。

5、SqlQueue队列的遍历如何实现?

解答:foreach循环即可。foreach($queue as $item)

6、rewind的作用是什么?

解答:rewind — 倒回文件指针的位置。将 handle 的文件位置指针设为文件流的开头。bool rewind ( resource $handle )。

7、什么时候使用rewind?

解答:比如要从头开始遍历或者输出队列的时候。

8、SqlQueue如何使用继承方法rewind()+valid()+current()+next()实现队列遍历?

解答:

 $queue->rewind();
while($queue->valid()){
echo $queue->current(),"\n";
$queue->next();
}