1,简介

  SPL,全称 Standard PHP Library 中文是 标准PHP类库。是php内置的一些拓展类和拓展接口,其内容包含数据结构、迭代器、接口、异常、SPL函数,文件处理等内容。SPL拓展只能用于PHP5.3版本及以后,并且不需要进行额外的配置,可以直接使用。详细信息可以进入PHP官方网站https://www.php.net/spl查看。 这里主要说明SPL中的数据结构内容的使用。

2,使用

1、栈

  栈是一种先进先出的数据结构。并且只能对栈的两端进行操作,进栈或者出栈。SplStack类通过使用一个双向链表来提供栈的主要功能。将出栈想象成遍历一个相反的数组的过程

$stack = new SplStack();
$stack->push('张三<br>');//入栈
$stack->push('李四<br>');
$stack->unshift("王五");//将’王五‘放入栈底
echo $stack->pop();//出栈 李四
echo $stack->pop();//张三
echo $stack->pop();//王五

2、对列

  队列是一种先进先出的数据结构。SplQueue 类同样通过使用一个双向链表来提供队列的主要功能。

$queue = new splQueue();
$queue->enqueue(5);//入队列
$queue->enqueue(2);
$queue->enqueue(1);
$queue->enqueue(3);
echo $queue->dequeue(); //出队列 5
echo $queue->dequeue(); //
echo $queue->dequeue(); //
echo $queue->dequeue(); //

3、堆

  堆就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆实现。其中根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆,最大堆(SplMaxHeap)和最小堆(SplMinHeap)都继承它实现的堆主要用于排序。

//最大堆 升序输出
$heap = new SplMaxHeap();
$heap->insert('E');
$heap->insert('B');
$heap->insert('D');
$heap->insert('A');
$heap->insert('C');
echo $heap->extract().'<br>'; # E
echo $heap->extract().'<br>'; # D
// 最小堆 降序输出
$heap = new SplMinHeap();
$heap->insert('E');
$heap->insert('B');
$heap->insert('D');
$heap->insert('A');
$heap->insert('C');
echo $heap->extract().'<br>';
echo $heap->extract().'<br>';

最大堆:堆中每个父节点的元素值都大于等于其孩子结点(如果存在);

最小堆:堆中每个父节点的元素值都小于等于其孩子结点(如果存在);

4、固定数组

//固定数组
$i = 1000000;
$fixbtime = microtime(true);
$fixstart = memory_get_usage();
$fixArray = new SplFixedArray($i);//生成长度为i的固定数组
$fixend = memory_get_usage();
$fixetime = microtime(true);
//普通数组
$btime2 = microtime(true);
$arr = array_fill(0, $i, null);
$end = memory_get_usage(); //生成固定长度的固定数组和普通数组所用时间
echo $fixetime - $fixbtime, PHP_EOL; //固定数组 0.0065009593963623
echo microtime(true) - $btime2, PHP_EOL; //普通数组 0.1734619140625
//生成固定长度的固定数组和普通数组所占内存
echo $fixend - $fixstart, PHP_EOL; //固定数组 4000280 byte
echo $end - $fixend, PHP_EOL; //普通数组 52194712 byte

  在内存和时间方面,固定数组都比普通数组的消耗少了很多。但是对于固定数组来说,对内存的申请一步到位了,当内存不够时候会报错,当内存用不完时,也不会释放,只能浪费。同时,固定数组都是索引数组,不能使用除了整数以外的key。

PHP的SPL标准库的更多相关文章

  1. PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题)

    PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题) 一.总结 SplStack就是继承双链表(SplDoublyLinkedList)实 ...

  2. php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便)

    php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便) 一.总结 直接看代码实例,特别方便易懂 thinkphp控制器利眠宁不支持(说明 ...

  3. PHP的SPL标准库里面的堆(SplHeap)怎么使用

    PHP的SPL标准库里面的堆(SplHeap)怎么使用 一.总结 1.因为SplHeap是抽象类,所以要先继承,实现里面的抽象方法compare后,才能new对象使用. 二.PHP的SPL标准库里面的 ...

  4. PHP SPL标准库-接口

    PHP SPL标准库有一下接口: Countable OuterIterator RecursiveIterator SeekableIterator SplObserver SplSubject A ...

  5. PHP 设计模式 笔记与总结(3)SPL 标准库

    SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...

  6. 【SPL标准库专题(1)】 SPL简介

    什么是SPL SPL是Standard PHP Library(PHP标准库)的缩写. 根据官方定义,它是"a collection of interfaces and classes th ...

  7. 【SPL标准库专题(10)】SPL Exceptions

    嵌套异常 了解SPL异常之前,我们先了解一下嵌套异常.嵌套异常顾名思义就是异常里面再嵌套异常,一个异常抛出,在catch到以后再抛出异常,这时可以通过Exception基类的getPrevious方法 ...

  8. 【SPL标准库专题(9)】 Datastructures:SplObjectStorage

    PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...

  9. 【SPL标准库专题(3)】 Classes

    我把SPL分为四个部分:Iterator,Classes,Datastructures,Function:而其中classes是就是做一些类的介绍(Iterator与Datastructures相关的 ...

随机推荐

  1. 第二章python中的一切皆对象

    1.函数和类也是对象,属于python的一等公民 赋值给一个变量 可以添加到集合对象之中 可以作为参数传递给函数 可以当作函数的返回值 def ask(name="ask_wzh" ...

  2. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块(Air202,SIM800)AT指令TCP透传方式,MQTT通信控制升级

    实现功能概要 这节和上一节的功能一样(只不过上节是利用Wi-Fi模块,这节是利用GPRS模块) 用户程序里面加入MQTT通信,执行用户程序的时候, 通过接收MQTT的升级命令实现升级. 凡是可以实现M ...

  3. Python power函数

    power函数 from math import pow def power(x, y): if y == 0: return 1 tot = 1 for i in range(y): tot *= ...

  4. 第02组Beta冲刺(2/4)

    队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:了解整个游戏的流程 GitHub签入记录 接下来的计划:继续完成游戏 还剩下哪些任务:完成游戏 燃尽图 遇到的困难:没有美术比较好的 ...

  5. 【BigData】Java基础_构造方法的使用

    需求描述 实现上图需求,根据输入的三个人的信息,分别计算出这个三个客户的平均年龄和最大年龄 涉及知识点: ①构造方法 ②字符串切割 ③对象数组 代码实现 代码结构图: package cn.test. ...

  6. Java 读取和写入文本文件

    package test_java; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStre ...

  7. ACT开发初步(一)

    ACT的全称是Application Customization Toolkit,是面向ANSYS系列产品的统一的二次开发平台.利用基于Python的API(Application Programmi ...

  8. 在Linux上使用mssql-conf工具配置SQL Server 2017

    mssql-conf是在Linux上安装SQL Server 2017后的一个配置脚本.你可以使用这个实用工具设置以下参数: Agent 启用SQL Server代理 Collation 设置一个新的 ...

  9. java基础 面向对象 & 接口 & 抽象类

    从语法层面而言,接口和抽象类的区别如下: 1.抽象类可以提供成员方法的实现细节,而接口中只能存在抽象方法(默认 public abstract)2.抽象类中的成员变量可以是多种类型,而接口中的成员变量 ...

  10. Certification information不能过大

    /* If certification information is too big this event can't be transmitted as it would cause failure ...