//堆栈,先进后出 $stack = new SplStack();//继承自SplDoublyLinkedList类 $stack[] = 1;//[0=>1] $stack[] = 2;//[0=>1,1=>2] $stack[] = 3;//[0=>1,1=>2,2=>3] //$stack->add(4,5); //报错超出偏移量 $stack->add(3,4); //添加一个元素到尾部 $stack->push("a"); $stack->push("b"); //[0=>1,1=>2,2=>3,3=>4,4=>'a',5=>'b'] //尾部弹出一个元素 echo $stack->pop(); echo $stack->pop(); //[0=>1,1=>2,2=>3,3=>4] $stack->offsetSet(0,'B');//等同$stack[0]='B'; //[0=>1,1=>2,2=>3,3=>'B'] //将指针指向迭代开始处 Iterator //双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向Top所在的位置,而双向链表调用之后指向bottom所在位置 $stack->rewind(); echo 'current:'.$stack->current();//current:B $stack->next();//堆栈的next操作使指针指向靠近bottom位置的下一个节点,而双向链表是靠近top的下一个节点 echo 'current:'.$stack->current();//current:3 $stack->rewind(); while($stack->valid()){ echo $stack->current(),"\n"; $stack->next();//B 3 2 1 } for ($stack->rewind(); $stack->valid(); $stack->next()) { echo $stack->current();//B 3 2 1 }