Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

5.3で追加されるSPLクラス

via. Lorenzo Alberton - Articles - PHP 5.3 SPL data structures: SplStack, SplHeap, SplPriorityQueue, SplDoublyLinkedList

php5.3-200804010230で確認しましたが、PHP5.3から新たに以下のクラスが追加されているようです。Stack、Heap、Queue、Listですね。

  • class SplDoublyLinkedList implements IteratorTraversableCountableArrayAccess
  • class abstract SplHeap implements IteratorTraversableCountable
  • class SplMaxHeap extends SplHeap implements CountableTraversableIterator
  • class SplMinHeap extends SplHeap implements CountableTraversableIterator
  • class SplPriorityQueue implements IteratorTraversableCountable
  • class SplQueue extends SplDoublyLinkedList implements ArrayAccessCountableTraversableIterator
  • class SplStack extends SplDoublyLinkedList implements ArrayAccessCountableTraversableIterator

SplStackクラスは、push/popメソッドでLIFOを実現します。

<?php
/**
 * @see http://www.alberton.info/php_5.3_spl_data_structures.html
 */
$stack = new SplStack();

$stack->push('b');
$stack->push('a');
$stack->push('c');

echo $stack->pop()."\n";
echo $stack->pop()."\n";
echo $stack->pop()."\n";

SplHeapクラスは抽象クラスになっていて、その派生クラスとしてSplMaxHeap/SplMinHeapの2種類用意されているようです。

<?php
/**
 * @see http://www.alberton.info/php_5.3_spl_data_structures.html
 */
$heap = new SplMaxHeap();
$heap->insert('b');
$heap->insert('a');
$heap->insert('c');

echo $heap->extract()."\n";
echo $heap->extract()."\n";
echo $heap->extract()."\n";

$heap = new SplMinHeap();
$heap->insert('b');
$heap->insert('a');
$heap->insert('c');

echo $heap->extract()."\n";
echo $heap->extract()."\n";
echo $heap->extract()."\n";

実行結果は以下の通りとなります。

$ /usr/local/lib/php53/bin/php -v
PHP 5.3.0-dev (cli) (built: Apr  1 2008 16:16:28)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies
$ /usr/local/lib/php53/bin/php heap.php
c
b
a
a
b
c
$ 

その他、SplPriorityQueueやSplDoublyLinkedList(双方向リスト)のサンプルはLorenzo Alberton - Articles - PHP 5.3 SPL data structures: SplStack, SplHeap, SplPriorityQueue, SplDoublyLinkedListをどうぞ(手抜き)