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/ 如果還沒有安裝請參考之前內容完成安裝 ...
随机推荐
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- UVA10537 Toll! Revisited
difkstra + 路径输出 The Toll! Revisited Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...
- 使用Windows2003创建FTP服务器 - 进阶者系列 - 学习者系列文章
现在有不少的FTP建设软件,比如Server-U软件.不过本文只介绍使用Windows2003来创建FTP服务器. 1. 打开控制面板的添加删除程序. 2. 打开 添加删除Windows组件 3. ...
- [Phonegap+Sencha Touch] 移动开发24 包wp8.1的App,弹出软键盘输入框聚焦实施后,无移动采收率方法来解决接口
这种现象不仅是现在显示phonegap包sencha touch的wp8.1该程序将出现(只wp8.1,wp8正常).其他js我测试了几个框架(app framework, jquery mobile ...
- SQL Server 增删改
--use用来设置当前使用哪个数据库use StudentDb--go批处理go --T-SQL中不区分大小写,数据库表中的数据是区分大小写的--例如:insert与INSERT不区分大小写,数据库表 ...
- openGL线s的绘制
/** * 缓冲区工具类 */ public class BufferUtil { /** * 将浮点数组转换成字节缓冲区 */ public static ByteBuffer arr2ByteBu ...
- [转载]LVS快速搭建教程
LVS配置教程 作者:oldjiang 一.前言 相信专程来读此文的读者对LVS必然有一定的了解,首先看图: 毋庸置疑,Load Balancer是负载调度器,由它将网络请求无缝隙调度到真实服务器,至 ...
- 2013集训.DAY21.A
随便点了一套刷,这套质量挺棒的,学了不少的东西,并且碰到了很久都没有打的题目 T1 card [指针技巧] 题1 集卡片 [问题描述] lzh小时候很喜欢收集卡片,他经常要去商店购买新到的卡片. 商店 ...
- mongo查询某个字段是否存在,并删除记录里的这个字段
查询course表中,存在lectures_count字段的记录信息 db.course.find( { "lectures.lectures_count": { $exists: ...
- 个人计算机安装hadoop全分布
一.工具说明 设备:实体主机一台 校园网络 虚拟设备:VMware下安装的ubuntu12.04版本三台,分别是master,slave1,slave2 二.ubuntu安装篇 前提知识:在windo ...