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。

最新文章

  1. Macaca自动化测试之Android测试
  2. javascript中BOM部分基础知识总结
  3. MySQL5.0数据库的安装
  4. jdbc 数据的增删改查的Statement Resultset PreparedStatement
  5. Android Device Monitor工具的DDMS使用
  6. Unity Scripting Tutorials 要点记录
  7. AngularJS(8)-指令directive
  8. bzoj2588
  9. 武道释义 &amp;#183; 零散
  10. 2、FileOutputStream---&gt;文件输出流(向文件写入数据)
  11. yii2.0 app上集成支付宝支付
  12. CMDB资产管理系统开发【day25】:需求分析
  13. 扩展的GM命令
  14. Android Text Color设置不当造成信息不显示
  15. #define WIN32_LEAN_AND_MEAN 的作用
  16. JAVA Spring 简单的配置和操作 ( 创建实体类, 配置XML文件, 调试 )
  17. Layout布局源码浅析之——FrameLayout
  18. 对Spark2.2.0文档的学习1-Cluster Mode Overview
  19. 傻瓜式学Python3——列表
  20. 条目二十一《总是让比较函数在等值情况下返回false》

热门文章

  1. NOIP2019翻车前计划以及日记
  2. 基环树DP
  3. android studio 配置相关问题
  4. 【BigData】Java基础_ArrayList的使用
  5. CF461B Appleman and Tree
  6. 作业:SSH
  7. 安装OpenIMSCore的SIP测试客户端 utcimsclient
  8. 关于MySQL 通用查询日志和慢查询日志分析(转)
  9. kali 破解wifi
  10. Maven 教程(21)— maven-compiler-plugin 插件详解--