搜索
首页
笔记
案例
关于
课程列表
PHP
php基础
基本语法
流程控制
函数
数组
对象
Trait
字符串处理
正则表达式
SPL
输出缓存
php与xml
生成器
php常用扩展
错误与异常处理
日期与时间
文件系统
图像处理
数据库开发
Mysqli扩展
Db类
高级功能
会话控制
CURL
PHP安全
PHP版本
从5.6到7.0
从7.0到7.1
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
正则表达式
输出缓存
SPL
## SPL的常用数据结构 spl提供双向链表、堆栈、队列、堆、降序堆、升序堆、优先级队列、定长数组、对象容器 ### 双向链表 #### 基本概念 ![alt 属性文本](http://qiniu.loveguiyuan.cn/blog19070408092422322) ![alt 属性文本](http://qiniu.loveguiyuan.cn/blog19070408092443378) #### SplDoublyLinkedList类 操作 * 当前节点操作:rewind、current、next、prev * 增加节点操作:push、unshift * 删除节点操作:pop、shift * 定位操作:bottom、top * 特定节点操作:offsetExists、offsetGet、offsetSet、offsetUnset **新增节点操作** ``` push(1); $link->push(2); $link->push(3); $link->unshift(100); var_dump($link); //array(4) { // [0]=> // int(100) // [1]=> // int(1) // [2]=> // int(2) // [3]=> // int(3) // } ``` **定位操作** ``` $link = new SplDoublyLinkedList(); $link->push(1); $link->push(2); $link->push(3); $link->unshift(100); echo $link->bottom(); // 100 echo $link->top(); // 3 ``` **删除节点操作** ``` $link = new SplDoublyLinkedList(); $link->push(10); $link->push(100); $link->push(1000); $link->unshift(1); $link->pop(); $link->shift(); var_dump($link); //array(2) { // [0]=> // int(10) // [1]=> // int(100) // } ``` **当前节点操作** ``` $link = new SplDoublyLinkedList(); $link->push(1); $link->push(2); $link->push(3); $link->push(4); /* 当前节点操作 */ $link->rewind(); var_dump($link->current()); // int(1) $link->next(); var_dump($link->current()); // int(2) $link->prev(); var_dump($link->current()); // int(1) ``` **特定节点操作** ``` $link = new SplDoublyLinkedList(); $link->push(1); $link->push(2); $link->push(3); $link->push(4); echo $link->offsetGet(3); // 4 if ($link->offsetExists(4)) { $link->offsetSet(4, 5); } else { echo 'not exists'; } // not exists ``` ### 栈 #### 概念 特点:先进后出 ![ ](http://qiniu.loveguiyuan.cn/blog19070411102495765) 如图,把3 5 7圆盘依次放入, 取出来则要按7 5 3的顺利取出。 #### SplStack类 ``` push('data1'); $stack->push('data2'); echo $stack->pop(); // data2; ``` ### 队列 #### 概念 特点:一种先进先出、后进后出的数据结构。比如学生排队打饭,先排的人打到饭了就走了。 #### SplQueue类 ``` $queue = new SplQueue(); $queue->enqueue('data1'); $queue->enqueue('data2'); echo $queue->dequeue(); // data1 echo $queue->dequeue(); // data2 ``` ### 固定长度数组 ``` // 固定长度数组 $arr = new SplFixedArray(10); $arr[0] = '111'; $arr[9] = 999; print_r($arr); //SplFixedArray Object //( // [0] => 111 // [1] => // [2] => // [3] => // [4] => // [5] => // [6] => // [7] => // [8] => // [9] => 999 //) ``` ## SPL常用迭代器 #### ArrayObject() ``` "yummy", "orange" => "ah ya, nice", "grape" => "wow, I love it!", "plum" => "nah, not me" ); $obj = new ArrayObject( $fruits ); $it = $obj->getIterator(); // How many items are we iterating over? echo "Iterating over: " . $obj->count() . " values\n"; // Iterate over the values in the ArrayObject: while( $it->valid() ) { echo $it->key() . "=" . $it->current() . "\n"; $it->next(); } // The good thing here is // that it can be iterated with foreach loop foreach ($it as $key=>$val) echo $key.":".$val."\n"; /* Outputs something like */ Iterating over: 4 values apple=yummy orange=ah ya, nice grape=wow, I love it! plum=nah, not me ``` ## SPL基础接口 ### Countable ``` members; } } $family = new Family(); echo count($family); // 4 ``` ## SPL函数的使用 ### spl_autoload_register ``` spl_autoload_register(['Auto', 'autoload']); class Auto { static function autoload ($className) { require $className; } } ```
正则表达式
输出缓存
文章目录