zoukankan      html  css  js  c++  java
  • PHP的SPL标准库

    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();//王五
    View Code

    2、对列

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

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

    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>';
    View Code

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

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

    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
    View Code

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

  • 相关阅读:
    Android模拟器操作快捷键
    【从零之三(更)】自定义类中调用讯飞语音包错误解决办法
    解决Please ensure that adb is correctly located at 'D:javasdkplatform-toolsadb.exe' and can be executed.
    辛星浅析同源策略
    Java读源代码学设计模式:适配器Adapter
    iOS 隐藏NavigationBar的方法
    Odoo(OpenERP)开发实践:数据模型学习
    Android软键盘状态的切换及其强制隐藏
    用python阐释工作量证明(proof of work)
    基于spark1.4的Spark-Sql
  • 原文地址:https://www.cnblogs.com/huangzikai/p/11602547.html
Copyright © 2011-2022 走看看