一、什麼是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