在許多框架和MVC中都能夠看到PHP SPL的身影, PHP SPL 在很多實際應用都佔了很大的比重
雙向鍊錶
<?php $obj = new SplDoublyLinkedList(); $obj->push(1); $obj->push(2); $obj->push(3); $obj->unshift(10); //unshifit 替换双向链表的首部 $obj->rewind(); // 使用current 必须调用rewind,把节点指针指向bottom节点 $obj->next(); // next 指向下一个节点 $obj->prev(); // 指针指向上一个节点 echo $obj->current(); // 指针指向当前结点 if($obj->current()) { echo "y"; }else{ echo "n"; } if($obj->valid()){ //如果当前节点是有效节点 valid则返回true } $obj->pop(); //var_dump($obj); print_r($obj);
堆棧的使用
<?php $stack = new SplStack(); //实例化堆栈 $stack->push("a"); //向堆栈中加入数据 $stack->push("b"); $stack->push("c"); /* $stack->offsetSet(0,'C'); //堆栈的节点0是top 的节点,设置节点的值 $stack->rewind(); //双向链表的rewind和堆栈的rewind相反,堆栈的rewind使得当前指针指向TOP所在的位置,而双向链表调用之后指向bottom所在的位置 echo "qq".$stack->next(); // 堆栈的next与双向链表相反 echo "re".$stack->current()."</br>"; //echo "bo".$stack->bottom()."</br>"; //echo "top".$stack->top(); print_r($stack); */ //从TOP开始遍历 $stack->rewind(); while($stack->valid()){ echo $stack->key()."=>".$stack->current()."</br>"; $stack->next(); } $pop = $stack->pop(); echo $pop; //pop操作从堆栈里面提取出的最后一个元素(TOP位置),同时在堆栈删除该节点
隊列
$que = new SplQueue(); $que->enqueue("a"); // 入队列 $que->enqueue("b"); $que->enqueue("c"); //print_r($que); echo "bottom".$que->bottom()."</br>"; echo "top".$que->top(); $que->rewind(); $que->dequeue(); //出队列 //从 bottom 位置删除 print_r($que);
ArrayIterator
<?php$fruits = array( "apple" => "apple value", "orange" => "orange value", "grape" => "grape value"); //定义一个水果数组$obj = new ArrayObject($fruits); $it = $obj->getIterator(); // 用foreach 实现遍历数组foreach($it as $key => $value){ echo $key."->".$value."</br>"; } $it->rewind(); //必须要 rewind//用 while 来遍历数组while($it->valid()){ echo $it->key()."->".$it->current()."</br>"; $it->next(); }//跳过某些元素进行打印$it->rewind();if($it->valid()){ $it->seek(1); //寻找到1的元素 while($it->valid()){ echo $it->key()."->".$it->current()."</br>"; $it->next(); } }echo "</br>"; $it->rewind();//$it->ksort(); //进行排序 用key , //$it->rewind();$it->asort(); //按value 进行排序while($it->valid()){ echo $it->key()."->".$it->current()."</br>"; $it->next(); }
AppendIterator
<?php $array_a = new ArrayIterator(array('a','b','c')); //定义两个 ArrayIterator $array_b = new ArrayIterator(array('d','e','f')); $it = new AppendIterator(); $it->append($array_a); // 将ArrayIterator追加到Iterator里 $it->append($array_b); foreach($it as $key => $value){ echo $key."||".$value."</br>"; } //通过APPEND方法把迭代器对象添加到AppendIterator对象中 //把两个数组的 数值添加到一个Interator
MultipleIterator 將陣列組合成整個輸出
$idIter = new ArrayIterator(array('01','02','03')); $nameIter = new ArrayIterator(array('qq','ss','show')); $mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC); $mit->attachIterator($idIter,"id"); $mit->attachIterator($nameIter,"name"); foreach($mit as $value){ print_r($value); }
File操作
date_default_timezone_get('PRC'); $it = new FilesystemIterator('.'); foreach($it as $value){ echo date("Y-m-d H:i:s",$value->getMtime())."</br>"; $value->isDir()?"<dir>":""; number_format($value->getSize()); echo $value->getFileName(); }