SPL學習之SplDoublyLinkedList
Standard PHP Library(SPL)是官方提供的标准库,从php5.0.0开始已经默认实现在php中,我们可以类比它为ruby中的gem安装的包。spl里面实现了许多迭代器和数据结构对象接口,非常实用和高效。下面是我的学习记录:
从php5.0.0之后才默认可用,而在php5.3.0开始这个扩展将一直开启,且不在php.ini内配置。
根据php.net/spl 相关文档描述,spl分为以下7种大类:
1.Datastructures数据结构对象。
2.Iterators迭代器。
3.interfaces接口。
4.Exceptions异常。
5.SPL Functions标准函数。
6.File Handling文件资源句柄。
7.Miscellaneous Classes and Interfaces多元类和接口。
下面我依次总结:
1.Datastructures
数据结构一直都是编程的主力。以前我们所说的堆、栈、队列,链表,树等。程序=数据结构+算法,已经成了大部分的人共识,在处理一些特定问题,选择适当的数据结构能够事半功倍。
1.The SplDoublyLinkedList class (双向链表)
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。(by wiki description)
funlist can see:
http://php.net/manual/zh/class.spldoublylinkedlist.php
// init an object of double Link list
$dlist = new SplDoublyLinkedList();
// insert item to the end of the list
$dlist->push("Linker");
$dlist->push("Joker");
$dlist->push("forker");
$dlist->push("worker");
// use unshift can insert an object at top of the list
$dlist->unshift('FreePHP');
// pop an object from the bottom of the list
$dlist->pop();
// delete an object from the top of the list
$dlist->shift();
關於遍歷的方式需要用到
public void SplDoublyLinkedList::setIteratorMode ( int $mode ) 方法
實現迭代器功能的選項有兩種參數,如下:
SplDoublyLinkedList::IT_MODE_LIFO(Stack style)SplDoublyLinkedList::IT_MODE_FIFO(Queue style)
eg:
$dlist->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO); // use Stack style
for($dlist->rewind();$dlist->valid();$dlist->next()){
echo $dlist->current()."<br/>";;
}
spl中有很多實現迭代器模式的經典例子,此爲其一。在數據庫操作中和數據迭代裏面非常常用。
同样双向链表可以对数据进行序列化和反序列化。
序列化:
$ser = $dlist->serialize();
var_dump($ser);
// out like this : string(45) "i:2;:s:6:"Linker";:s:5:"Joker";:s:6:"forker";"
反序列为unserilalize()方法。
SPL學習之SplDoublyLinkedList的更多相关文章
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(3)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- 開博客了, 因為搞Delphi 開發的關於Delphi學習
開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...
- Markdown 學習
Markdown 格式由John Gruber 創建,是一種便於閱讀,非常簡潔直觀的純文本文件格式,可以方便地轉為html等其他格式,很適合與寫作,不需要關注排版問題 常用學習資源有: ###標題用 ...
- 無心插柳的Linux學習者代言人——蔡德明
誰是「蔡德明」恐怕沒有多少人知道,不過提到「鳥哥」這個稱號,在臺灣的Linux社群幾乎是無人不知無人不曉,蔡德明正是鳥哥的本名.鳥哥究竟多有名? 如果你是有意學習Linux的初學者,卻不知如何下手,1 ...
- Linux网络设备驱动架構學習(三)
Linux网络设备驱动架構學習(三) 接下來會從以下幾個方面介紹網絡設備驅動的編寫流程: 1.網絡設備的註冊與註銷 2.網絡設備的初始化 3.網絡設備的打開與釋放 4.網絡數據發送流程 5.網絡數據接 ...
- 學習 DT device tree 以 ST 的開發板 STM32F429i-disc1 為例
目標 因為對 device tree 不是很熟悉, 所以就將 device tree, 設為學習目標. 啟動 注意, 這篇隨筆的解說都放在最下面,會標 Explanation_XX,只要搜尋 Expl ...
- 機器學習基石(Machine Learning Foundations) 机器学习基石 课后习题链接汇总
大家好,我是Mac Jiang,非常高兴您能在百忙之中阅读我的博客!这个专题我主要讲的是Coursera-台湾大学-機器學習基石(Machine Learning Foundations)的课后习题解 ...
- 機器學習基石 (Machine Learning Foundations) 作业1 Q15-17的C++实现
大家好,我是Mac Jiang.今天和大家分享Coursera-台湾大学-機器學習基石 (Machine Learning Foundations) -作业1的Q15-17题的C++实现. 这部分作业 ...
- Gazebo機器人仿真學習探索筆記(二)基本使用說明
在完成Gazebo7安裝後,需要熟悉Gazebo,方便之後使用. 部分源代碼可以參考:https://bitbucket.org/osrf/gazebo/src/ 如果還沒有安裝請參考之前內容完成安裝 ...
随机推荐
- 基于科大讯飞语音云windows平台开发
前记: 前段时间公司没事干,突发奇想想做一个语音识别系统,看起来应该非常easy的,但做起来却是各种问题,这个对电气毕业的我,却是挺为难的.谷姐已经离我们而去,感谢度娘,感谢CSDN各位大神,好歹也做 ...
- Linux:最终用途cat命令查看不可见的字符
常,的程序或软件,并没有语法错误,你检查其内容没有发现相关问题.这是时间,因为你用普通的文本编辑软件来查看,有很多的字符显示不出来的,但在最终用途cat命令可以很easy地检測出是否存在这些字符. ~ ...
- Visual Studio 2010 单元测试之一---普通单元测试
原文:Visual Studio 2010 单元测试之一---普通单元测试 本文以Visual Studio 2010为例,来介绍如何在Visual Studio里面进行单元测试. 首先来介绍普通单元 ...
- android数据库升级的措辞
在基类table增加upgrade操作: public abstract class DbBaseTable { private static final String TAG = "DbB ...
- Android 实现用户列表信息的功能,然后选择删除幻灯片删除功能
在项目开发过程中.经常须要对用户列表的信息进行删除的操作.Android中经常使用的删除操作方式有两种 .一种就是类似微信的滑动出现删除button方式,另一种是通过CheckBox进行选择.然后通过 ...
- Office文档在线编辑的实现之一
因为项目的关系,研究了一下Office的在线编辑功能,写出来共享一下. Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav ...
- QualityCenter的备份
1.停止QC Server:2.备份Domain repository,它囊括每个项目的大量数据(包括自动化测试数据.附件.设置和格式表单等).要想知道某个项目所使用的数据库的名字,可以在Site A ...
- iis7 下配置MVC问题
HTTP 错误 404.0 - Not Found 您要找的资源已被删除.已更名或暂时不可用. 详细错误信息 模块 IIS Web Core 通知 MapRequestHandler 处理程序 Sta ...
- DSP TMS320C6000基础学习(7)—— Bootloader与VectorTable
本文主要简单记录C6000在启动装载过程和中断向量表的配置. 1. Bootloader 如上图, (1)在Device Reset阶段: 设备初始化为默认状态,大部分三态输出都配置为高阻态. (2) ...
- NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用
NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.N ...