这篇文章主要介绍了关于PHP的标准库 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

转:https://www.cnblogs.com/yafang/p/5872187.html 

一.什么是SPL?

    SPL是用于解决典型问题(standard problems)的一组接口与类的集合。(出自:)

    SPL,PHP 标准库(Standard PHP Library) ,从 PHP 5.0 起内置的组件和接口,且从 PHP5.3 已逐渐的成熟。SPL 在所有的 PHP5 开发环境中被内置,同时无需任何设置。

  二.如何使用?

    SPL提供了一组标准数据结构:

    双向链表


SplStack

SplQueue

SplDoublyLinkedList

    双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储自己的信息,还要保存前驱和后继节点的地址。

    PHP SPL中的SplDoublyLinkedList类提供了对双链表的操作。

    SplDoublyLinkedList类摘要如下:


1 SplDoublyLinkedList implements Iterator , ArrayAccess , Countable { 2 3 public __construct ( void ) 4 public void add ( mixed $index , mixed $newval ) 5 //双链表的头部节点 6 public mixed top ( void ) 7 //双链表的尾部节点 8 public mixed bottom ( void ) 9 //双联表元素的个数 10 public int count ( void ) 11 //检测双链表是否为空 12 public bool isEmpty ( void ) 13 14 15 //当前节点索引 16 public mixed key ( void ) 17 //移到上条记录 18 public void prev ( void ) 19 //移到下条记录 20 public void next ( void ) 21 //当前记录 22 public mixed current ( void ) 23 //将指针指向迭代开始处 24 public void rewind ( void ) 25 //检查双链表是否还有节点 26 public bool valid ( void ) 27 28 //指定index处节点是否存在 29 public bool offsetExists ( mixed $index ) 30 //获取指定index处节点值 31 public mixed offsetGet ( mixed $index ) 32 //设置指定index处值 33 public void offsetSet ( mixed $index , mixed $newval ) 34 //删除指定index处节点 35 public void offsetUnset ( mixed $index ) 36 37 //从双链表的尾部弹出元素 38 public mixed pop ( void ) 39 //添加元素到双链表的尾部 40 public void push ( mixed $value ) 41 42 //序列化存储 43 public string serialize ( void ) 44 //反序列化 45 public void unserialize ( string $serialized ) 46 47 //设置迭代模式 48 public void setIteratorMode ( int $mode ) 49 //获取迭代模式SplDoublyLinkedList::IT_MODE_LIFO (Stack style) SplDoublyLinkedList::IT_MODE_FIFO (Queue style) 50 public int getIteratorMode ( void ) 51 52 //双链表的头部移除元素 53 public mixed shift ( void ) 54 //双链表的头部添加元素 55 public void unshift ( mixed $value ) 56 57 }

    

    使用起来也比较简单


1 $list = new SplDoublyLinkedList(); 2 $list->push('a'); 3 $list->push('b'); 4 $list->push('c'); 5 $list->push('d'); 6 7 $list->unshift('top'); 8 $list->shift(); 9 10 $list->rewind();//rewind操作用于把节点指针指向Bottom所在的节点 11 echo 'curren node:'.$list->current()."<br />";//获取当前节点 12 13 $list->next();//指针指向下一个节点 14 echo 'next node:'.$list->current()."<br />"; 15 16 $list->next(); 17 $list->next(); 18 $list->prev();//指针指向上一个节点 19 echo 'next node:'.$list->current()."<br />"; 20 21 if($list->current()) 22 echo 'current node is valid<br />'; 23 else 24 echo 'current node is invalid<br />'; 25 26 27 if($list->valid())//如果当前节点是有效节点,valid返回true 28 echo "valid list<br />"; 29 else 30 echo "invalid list <br />"; 31 32 33 var_dump(array( 34 'pop' => $list->pop(), 35 'count' => $list->count(), 36 'isEmpty' => $list->isEmpty(), 37 'bottom' => $list->bottom(), 38 'top' => $list->top() 39 )); 40 41 $list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO); 42 var_dump($list->getIteratorMode()); 43 44 for($list->rewind(); $list->valid(); $list->next()) { 45 echo $list->current().PHP_EOL; 46 } 47 48 var_dump($a = $list->serialize()); 49 //print_r($list->unserialize($a)); 50 51 $list->offsetSet(0,'new one'); 52 $list->offsetUnset(0); 53 var_dump(array( 54 'offsetExists' => $list->offsetExists(4), 55 'offsetGet' => $list->offsetGet(0), 56 57 )); 58 var_dump($list); 59 60 //堆栈,先进后出 61 $stack = new SplStack();//继承自SplDoublyLinkedList类 62 63 $stack->push("a<br />"); 64 $stack->push("b<br />"); 65 66 echo $stack->pop(); 67 echo $stack->pop(); 68 echo $stack->offsetSet(0,'B');//堆栈的offset=0是Top所在的位置,offset=1是Top位置节点靠近bottom位置的相邻节点,以此类推 69 $stack->rewind();//双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向bottom所在位置70 echo 'current:'.$stack->current().'<br />'; 71 72 $stack->next();//堆栈的next操作使指针指向靠近bottom位置的下一个节点,而双向链表是靠近top的下一个节点 73 echo 'current:'.$stack->current().'<br />'; 74 echo '<br /><br />'; 75 76 //队列,先进先出 77 $queue = new SplQueue();//继承自SplDoublyLinkedList类 78 79 $queue->enqueue("a<br />");//插入一个节点到队列里面的Top位置 80 $queue->enqueue("b<br />"); 81 82 $queue->offsetSet(0,'A');//堆栈的offset=0是Top所在的位置,offset=1是Top位置节点靠近bottom位置的相邻节点,以此类推 83 84 echo $queue->dequeue(); 85 echo $queue->dequeue(); 86 87 echo "<br /><br />";

    堆


SplMaxHeap

SplMinHeap

SplHeap