SPL 笔记
PHP SPL是指 standard php library,php标准库。
- <?php
- /*
- * SplFixedArray():用于创建固定长度的数组,只允许整型数作为索引,比普通php数组更快,性能更好
- * 它本身实现了Iterator ArrayAccess Countable这几个接口
- * 实现了ArrayAccess,那么可以使用foreach遍历
- * 实现了Countable,那么可以使用count计算长度
- * 实现了Iterator,那么可以向链表一样操作
- */
- $arr = new SplFixedArray(5);//创建时指定长度
- $arr->setSize(4);//setSize()动态设置数组长度
- $arr[0] = 'a';
- $arr[1] = 'b';
- $arr[2] = 'c';
- $arr[3] = 'd';
- //遍历,遍历完后指针指向末尾空
- foreach ($arr as $v){
- echo $v;
- echo PHP_EOL;
- }
- echo "<br/>";
- var_dump($arr->valid());//已经移出数组外
- //getSize() count()都是获取数组长度
- $a = $arr->getSize();
- echo $a;//4
- echo "<br/>";
- echo $arr->count();//实现了Countable接口的方法,4
- echo "<br/>";
- $a = count($arr);//数组实现了Countable,php数组提供的count方法也可用
- echo $a;//4
- echo "<br/>";
- //实现Iterator中的方法
- /*
- * 移动指针方法: rewind(),next(),都只移动指针,无返回值,是一个动作
- * 取键值的方法: key(),current() 返回当前指针指向的index 和element
- * 检查指针方法: valid() 检查当前指针是否超出数组范围,返回bool值
- *
- */
- $arr->rewind();//重置指针,指向开头处,无返回值
- $a = $arr->current();//返回当前指针指向的值
- var_dump($a);
- echo PHP_EOL;
- $arr->next();//移动指针,将指针指向下一位,无返回值
- $a = $arr->valid();//检测当前指针是否有效,也就是说当前指针是否超出数组范围
- var_dump($a);
- $a = $arr->current();//返回当前指针指向的值
- var_dump($a);
- echo PHP_EOL;
- echo $arr->key();//返回当前指针指向的key
- $arr->next();
- $arr->next();
- $arr->next();//移出了数组范围,
- var_dump($arr->valid());//检测返回false
- /*======================================
- *
- * offsetget(index) = $arr[$index]//获取索引对应的元素值
- * offserget(index,element) = ($arr[$index]=$element)//修改index对应的element
- * offsetUnset(index) = unset($arr[$index])//释放index对应的element
- * offsetExists(index) = isset($arr[$index])//判断index是否存在
- *
- *=======================================*/
- $a = $arr->offsetGet(3); // 相当于 $arr[3]
- var_dump($a);//d
- echo $arr[3];//d
- echo PHP_EOL;
- $arr->offsetSet(3,'e');//相当于$arr[3] = 'e';
- echo $arr[3];
- $arr[3] = 'd';
- echo PHP_EOL;
- echo $arr[3];
- $arr->offsetUnset(3);//相当于unset($arr[3]);
- var_dump($arr[3]);//null
- $m = $arr->offsetExists(3);//相当于isset($arr[3])
- var_dump($m);
- /*=======SplFixedArray()与PHP数组的转化函数======
- 方法 fromAaary() : 将一个PHP普通数组转化成SPL数组,静态方法SplFixedArray::fromArray(),
- 方法 toArray() :将一个SPL数组转化成PHP普通数组 ,无参数,返回PHP普通数组
- =============================================*/
- $arr = $arr->toArray();
- var_dump($arr);//返回普通php数组
- $arr = array(1=>3,0=>1,4=>2);//普通PHP数组
- $arr = SplFixedArray::fromArray($arr);//第二个参数是默认true,表示保持原来的索引关系。false表示舍弃原来的索引
- var_dump($arr);//返回SPL数组
- $arr = array(1=>3,0=>1,4=>2);//普通PHP数组
- $arr = SplFixedArray::fromArray($arr,false);//舍弃原来的索引关系
- var_dump($arr);//返回SPL数组
- ?>
接下来是双向链表
- <?php
- /**
- * SPL双向队列SplDoublyLinkedList(),实现了Iterator , ArrayAccess , Countable接口
- */
- $linklist = new SplDoublyLinkedList();
- $linklist->push('a');//插入元素
- $linklist->push('b');
- $linklist->push('c');
- $linklist->push('d');
- var_dump($linklist->getIteratorMode());
- /*
- * Iterator 系列方法
- */
- $linklist->rewind();//指针指向开头,动作,无返回值
- $linklist->next();//移动指针,动作,无返回值
- var_dump($linklist->key());//返回当前指针指向的index
- var_dump($linklist->current());//返回当前指针指向的element
- var_dump($linklist->valid());//检测指针是否移出链表
- //补充
- $linklist->prev();//指针向前移动,对应next向后
- var_dump($linklist->current());
- /*
- * ArrayAccess 系列方法
- */
- //offSetGet offsetSet offsetExists offsetUnset 和SplFixedArray的一样,按照数组方式的几个操作
- foreach ($linklist as $value){//可以像foreach遍历
- echo $value;
- echo PHP_EOL;
- }
- var_dump($linklist[0]);//以数组方式取值
- echo count($linklist);//4,数组方式
- echo PHP_EOL;
- /*
- * Countable()方法
- */
- echo $linklist->count();//4
- /*
- * 自身特有方法
- */
- $linklist->rewind();//指针指向底部,这个函数要常用
- //add()方法在5.5.0以上的版本才存在,将一个值插入链表某个位置,和原来的值形成链表,也就是这个节点的多个值链接成一个链表
- //serialize()/unserialize()两个函数在5.4.0以上的版本中才能使用,序列化和反序列化使用
- var_dump($linklist->isEmpty());//判断是否为空
- $linklist->push('e');//往顶部插入元素
- $linklist->unshift('A');//往底部插入元素
- var_dump($linklist->top());//返回顶部元素,后插入的在顶部
- var_dump($linklist->bottom());//返回底部元素,先插入的在底部
- var_dump($linklist->pop());//弹出顶部元素
- var_dump($linklist->shift());//弹出底部元素
- $linklist->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);//这两个是一对,暂不清楚具体怎么用的
- var_dump($linklist->getIteratorMode());
- ?>
SPL 笔记的更多相关文章
- PHP标准库 (SPL) 笔记
简介 SPL是Standard PHP Library(PHP标准库)的缩写. The Standard PHP Library (SPL) is a collection of interfaces ...
- 【夯实PHP基础】PHP标准库 SPL
PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供 ...
- PHP 错误与异常 笔记与总结(12 )异常
① 异常的概念:异常和错误的区别 PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制.PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念. ② 异常的语法结构 [例1] &l ...
- PHP高级编程SPL
这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去非常复杂,可是非常实用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 因为这是供自己參考的笔记,不 ...
- PHP标准库 SPL
PHP SPL笔记 这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 由于这是供 ...
- php spl库的使用(PHP标准库)【摘抄引用】
文章来源与推荐阅读:阮一峰--PHP SPL笔记 && PHP SPL使用方法和他的威力 1.SPL 是什么? SPL:standard php library php标准库,此 ...
- PHP 设计模式 笔记与总结(3)SPL 标准库
SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...
- php学习笔记2016.1
基本类型 PHP是一种弱类型语言. PHP类型检查函数 is_bool() is_integer() is_double() is_string() is_objec ...
- SPL学习 迭代器
主要学习内容: 慕课网的spl视频教程 阮一峰SPL学习笔记 http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html SPL类详解 http ...
随机推荐
- Socket编程 - 网络基础知识
API编程部分:http://www.cnblogs.com/Jimmy1988/p/7895213.html 1. 协议简介 此处,我们主要介绍Linux编程常用的三种协议(TCP/UDP/IP), ...
- mysql5.0版本下载地址
http://dev.mysql.com/downloads/mysql/5.0.html Other Downloads: Windows (x86, 32-bit), ZIP Archive 5. ...
- BASE64转文件下载
你可以用HTML 5 注意:返回的文件数据必须是base 64编码的,因为您不能对二进制数据进行JSON编码 在我的AJAX我得到了如下的数据结构: <!DOCTYPE html> < ...
- Python__组合数据类型
组合数据:集合类型.序列类型(元组类型.列表类型).字典类型 集合: 定义:集合是多个元素的无序组合.(无序,唯一,Python中要求放入集合中的数据类型是不可变的). 集合用大括号 {}表示,元素间 ...
- 入门redis
学习了大佬的博客,来源自:https://www.cnblogs.com/5ishare/p/6280023.html 一.下载 https://github.com/ServiceStack/red ...
- jquery源码学习笔记(一)jQuery的无new构建
本人是一名.net程序员..... 你一个.net coder 看什么jQuery 源码啊? 原因吗,很简单.技多不压身吗(麻蛋,前端工作好高...羡慕). 我一直都很喜欢JavaScript,废话不 ...
- AngleSharp一些示例
看到了AngleSharp,感觉这个非常好用,比HtmlAgilityPack感觉好用点 AngleSharp 地址:https://github.com/AngleSharp/AngleSharp ...
- js设置光标插入文字和HTML
原文链接:js设置光标插入文字和HTML 在一个textarea的某个光标位置插入文字或者在某个编辑器中插入图片html内容,我最近经常和这些打交道,但总是一团模糊,今天整理一下关于如何插入文字,设置 ...
- 正能量:You Are the Best
Success comes from knowing that you did your best to become the best that you are capable of becomin ...
- Myeclipse使用过程配置汇总
1.下载安装及破解方法 myeclipse2014专业版下载地址链接:https://pan.baidu.com/s/1i62YOGt 密码:nlqj : 下载后安装到最后一步先不要打开软件,如 ...