一、什么是spl标准库呢?
引官方的一段解释:SPL是用于解决典型问题(standard problems)的一组接口与类的集合。
对许多phper来说,这个东西估计很多人并不熟悉,在平时的开发初级开发者并用不到,或者用到了也不知道。在重温数据结构的时候,我就在想,PHP有没有已经封装好的函数或方法可以直接使用队列,栈这些东西呢?好奇的我上网查询了一下,这世界上最好的语言确实名不虚传。确实有这些函数。它们被放在一个个封装类里,我们只需要实例化这些类,就可以调用相应的方法进行操作。
实际上,这是一个PHP拓展,大概类似于swoole吧,此拓展只能再PHP5.3后使用,并且现在已经内置到PHP内核中,说明我们不需开启相应配置即可使用。这里我主要重点说明关于数据结构的spl使用。
二、spl的常见四种数据结构的使用
2.1 栈的使用:
我们知道栈是一种后进先出的数据结构。并且只能对栈的两端进行操作,进栈或者出栈。SplStack类通过使用一个双向链表来提供栈的主要功能。简单的操作如下:
<?php
$stack = new SplStack();
$stack->push(5);
$stack->push(1);
$stack->push(7);
//在指定的原来索引后面插入数值,注意这里的索引是从7为0开始算的
$stack->add(1,3);
echo $stack->pop();//7
echo $stack->pop();//1
echo $stack->pop();//3
echo $stack->pop();//5
更多详细使用:http://php.net/manual/zh/class.splstack.php
2.2队列的使用
队列是一种先进先出的数据结构。
<?php
$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
更多详细使用:http://php.net/manual/zh/class.splqueue.php
2.3 堆的使用:
<?php
$heap = new SplMaxHeap(); # 最大堆 升序输出
$heap->insert('E');
$heap->insert('B');
$heap->insert('D');
$heap->insert('A');
$heap->insert('C');
echo $heap->extract(), PHP_EOL; # E
echo $heap->extract(), PHP_EOL; # D
$heap = new SplMinHeap(); # 最小堆 降序输出
$heap->insert('E');
$heap->insert('B');
$heap->insert('D');
$heap->insert('A');
$heap->insert('C');
print PHP_EOL;
echo $heap->extract(), PHP_EOL; # A
echo $heap->extract(), PHP_EOL; # B
?>
更多详细使用:http://php.net/manual/zh/class.splheap.php
2.4 固定数组的使用
<?php
//长度为10的固定数组
$array = new SplFixedArray(10);
$array[1] = 2;
$array[3] = 'you';
$array[5] = 'are';
$array[7] = 'the';
$array[9] = 'best';
var_dump($array);
//拓展数组大小
$array->setSize(15);
var_dump($array);
打印结果:
更多详细使用:http://php.net/manual/zh/class.splfixedarray.php