微信扫一扫打赏支持

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

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

一、总结

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

 

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

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

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

 1 $queue = new SplQueue();
 2   
 3  /**
 4   * 可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:
 5  * (1)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP  (默认值,迭代后数据保存)
 6  * (2)SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE (迭代后数据删除)
 7  */
 8  $queue->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE);
 9   
10  //SplQueue::enqueue()其实就是 SplDoublyLinkedList::push()
11  $queue->enqueue('a');
12  $queue->enqueue('b');
13  $queue->enqueue('c');
14   
15  //SplQueue::dequeue()其实就是 SplDoublyLinkedList::shift()
16  print_r($queue->dequeue());
17   
18  foreach($queue as $item) {
19      echo $item . PHP_EOL;
20  }
21   
22  print_r($queue);

 

三、php参考手册

简介 ¶

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

类摘要 ¶

 1 SplQueue extends SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {
 2 /* 方法 */
 3 __construct ( void )
 4 mixed dequeue ( void )
 5 void enqueue ( mixed $value )
 6 void setIteratorMode ( int $mode )
 7 /* 继承的方法 */
 8 public void SplDoublyLinkedList::add ( mixed $index , mixed $newval )
 9 public mixed SplDoublyLinkedList::bottom ( void )
10 public int SplDoublyLinkedList::count ( void )
11 public mixed SplDoublyLinkedList::current ( void )
12 public int SplDoublyLinkedList::getIteratorMode ( void )
13 public bool SplDoublyLinkedList::isEmpty ( void )
14 public mixed SplDoublyLinkedList::key ( void )
15 public void SplDoublyLinkedList::next ( void )
16 public bool SplDoublyLinkedList::offsetExists ( mixed $index )
17 public mixed SplDoublyLinkedList::offsetGet ( mixed $index )
18 public void SplDoublyLinkedList::offsetSet ( mixed $index , mixed $newval )
19 public void SplDoublyLinkedList::offsetUnset ( mixed $index )
20 public mixed SplDoublyLinkedList::pop ( void )
21 public void SplDoublyLinkedList::prev ( void )
22 public void SplDoublyLinkedList::push ( mixed $value )
23 public void SplDoublyLinkedList::rewind ( void )
24 public string SplDoublyLinkedList::serialize ( void )
25 public void SplDoublyLinkedList::setIteratorMode ( int $mode )
26 public mixed SplDoublyLinkedList::shift ( void )
27 public mixed SplDoublyLinkedList::top ( void )
28 public void SplDoublyLinkedList::unserialize ( string $serialized )
29 public void SplDoublyLinkedList::unshift ( mixed $value )
30 public bool SplDoublyLinkedList::valid ( void )
31 }

Table of Contents ¶

实例

 1 <?php
 2   
 3 $queue = new SplQueue();
 4 $queue->enqueue('A');
 5 $queue->enqueue('B');
 6 $queue->enqueue('C');
 7 
 8 $queue->rewind();
 9 while($queue->valid()){
10     echo $queue->current(),"\n";
11     $queue->next();
12 }
13 
14 print_r($queue);
15 $queue->dequeue(); //remove first one
16 print_r($queue);
17 
18 ?>
19 Output
20 
21 A
22 B
23 C
24 SplQueue Object
25 (
26     [flags:SplDoublyLinkedList:private] => 4
27     [dllist:SplDoublyLinkedList:private] => Array
28         (
29             [0] => A
30             [1] => B
31             [2] => C
32         )
33 
34 )
35 SplQueue Object
36 (
37     [flags:SplDoublyLinkedList:private] => 4
38     [dllist:SplDoublyLinkedList:private] => Array
39         (
40             [0] => B
41             [1] => C
42         )
43 
44 )

 

四、测试题-简答题

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();
 }

 

posted @ 2018-05-29 04:15  范仁义  阅读(1177)  评论(0编辑  收藏  举报