データ構造目次
SPL では、標準的なデータ構造を提供しています。 ここで、それらを実装ごとに分類してまとめます。 双方向リンクリスト双方向リンクリスト (Doubly Linked List: DLL) は、双方向のノードへのリンクを持つノードのリストです。 イテレータの操作、両隣へのアクセス、ノードの追加や削除のコストは、 データ構造が DLL の場合は O(1) となります。 これは、スタックやキューを実装するのに適しています。
ヒープヒープは、ツリー風の構造です。ヒープ特有の性質として、 個々のノードはその子ノードと等しいかそれより大きな値となります。 値の比較は、ヒープ全体の比較メソッドとして実装されているものを使用します。
配列配列は、データを連続的に格納してインデックス経由でアクセスできるようにした構造です。 PHP の配列と混同しないようにしましょう。PHP の配列は、 実際のところは順序つきハッシュテーブルとして実装されています。
マップマップは、キー/値 のペアからなるデータ構造です。 PHP の配列は、整数値/文字列を値と対応させたマップとみなすことができます。 SPL では、オブジェクトとデータを対応させるマップを提供しています。 このマップは、オブジェクトの集合として扱うことができます。
SplDoublyLinkedList クラスはじめにSplDoublyLinkedList クラスは、双方向リンクリストの主要な機能を提供します。 クラス概要
SplDoublyLinkedList
implements
Iterator
Countable
ArrayAccess
Serializable
/* 定数 */
public
const
int
SplDoublyLinkedList::IT_MODE_LIFO;
public
const
int
SplDoublyLinkedList::IT_MODE_FIFO;
public
const
int
SplDoublyLinkedList::IT_MODE_DELETE;
public
const
int
SplDoublyLinkedList::IT_MODE_KEEP;
/* メソッド */
public void add(int
$index , mixed $value )public mixed bottom()
public int count()
public mixed current()
public int getIteratorMode()
public bool isEmpty()
public int key()
public void next()
public bool offsetExists(int
$index )public mixed offsetGet(int
$index )public void offsetSet(intnull
$index , mixed $value )public void offsetUnset(int
$index )public mixed pop()
public void prev()
public void push(mixed
$value )public void rewind()
public string serialize()
public int setIteratorMode(int
$mode )public mixed shift()
public mixed top()
public void unserialize(string
$data )public void unshift(mixed
$value )public bool valid()
定義済み定数イテレーションの方向
イテレーションの振る舞い
SplStack クラスはじめに
SplStack クラスは、スタックの主要な機能を提供します。
双方向リンクリストのイテレータのモードを
クラス概要
SplStack
extends
SplDoublyLinkedList
/* 継承した定数 */
public
const
int
SplDoublyLinkedList::IT_MODE_LIFO;
public
const
int
SplDoublyLinkedList::IT_MODE_FIFO;
public
const
int
SplDoublyLinkedList::IT_MODE_DELETE;
public
const
int
SplDoublyLinkedList::IT_MODE_KEEP;
/* 継承したメソッド */
public void add(int
$index , mixed $value )public mixed bottom()
public int count()
public mixed current()
public int getIteratorMode()
public bool isEmpty()
public int key()
public void next()
public bool offsetExists(int
$index )public mixed offsetGet(int
$index )public void offsetSet(intnull
$index , mixed $value )public void offsetUnset(int
$index )public mixed pop()
public void prev()
public void push(mixed
$value )public void rewind()
public string serialize()
public int setIteratorMode(int
$mode )public mixed shift()
public mixed top()
public void unserialize(string
$data )public void unshift(mixed
$value )public bool valid()
例
例1 SplStack の例
<?php 上の例の出力は以下となります。 3 2 1 SplQueue クラスはじめに
SplQueue クラスは、キューの主要な機能を提供します。
双方向リンクリストのイテレータのモードを
クラス概要
SplQueue
extends
SplDoublyLinkedList
/* 継承した定数 */
public
const
int
SplDoublyLinkedList::IT_MODE_LIFO;
public
const
int
SplDoublyLinkedList::IT_MODE_FIFO;
public
const
int
SplDoublyLinkedList::IT_MODE_DELETE;
public
const
int
SplDoublyLinkedList::IT_MODE_KEEP;
/* メソッド */
public mixed SplQueue::dequeue()
public void SplQueue::enqueue(mixed
$value )/* 継承したメソッド */
public void add(int
$index , mixed $value )public mixed bottom()
public int count()
public mixed current()
public int getIteratorMode()
public bool isEmpty()
public int key()
public void next()
public bool offsetExists(int
$index )public mixed offsetGet(int
$index )public void offsetSet(intnull
$index , mixed $value )public void offsetUnset(int
$index )public mixed pop()
public void prev()
public void push(mixed
$value )public void rewind()
public string serialize()
public int setIteratorMode(int
$mode )public mixed shift()
public mixed top()
public void unserialize(string
$data )public void unshift(mixed
$value )public bool valid()
例
例2 SplQueue の例
<?php 上の例の出力は以下となります。 1 2 3 例3 SplQueue を使ってタスクを効率的に処理する
<?php SplHeap クラスはじめにSplHeap クラスは、ヒープの主要な機能を提供します。 クラス概要
abstract
SplHeap
implements
Iterator
Countable
/* メソッド */
protected int compare(mixed
$value1 , mixed $value2 )public int count()
public mixed current()
public mixed extract()
public true insert(mixed
$value )public bool isCorrupted()
public bool isEmpty()
public int key()
public void next()
public bool recoverFromCorruption()
public void rewind()
public mixed top()
public bool valid()
SplMaxHeap クラスはじめにSplMaxHeap クラスは、ヒープの主要な機能を提供し、最大値を先頭に保ちます。 クラス概要
SplMaxHeap
extends
SplHeap
/* メソッド */
protected int SplMaxHeap::compare(mixed
$value1 , mixed $value2 )/* 継承したメソッド */
protected int compare(mixed
$value1 , mixed $value2 )public int count()
public mixed current()
public mixed extract()
public true insert(mixed
$value )public bool isCorrupted()
public bool isEmpty()
public int key()
public void next()
public bool recoverFromCorruption()
public void rewind()
public mixed top()
public bool valid()
SplMinHeap クラスはじめにSplMinHeap クラスは、ヒープの主要な機能を提供し、最小値を先頭に保ちます。 クラス概要
SplMinHeap
extends
SplHeap
/* メソッド */
protected int SplMinHeap::compare(mixed
$value1 , mixed $value2 )/* 継承したメソッド */
protected int compare(mixed
$value1 , mixed $value2 )public int count()
public mixed current()
public mixed extract()
public true insert(mixed
$value )public bool isCorrupted()
public bool isEmpty()
public int key()
public void next()
public bool recoverFromCorruption()
public void rewind()
public mixed top()
public bool valid()
SplPriorityQueue クラスはじめにSplPriorityQueue クラスは、優先順位つきキューの主要な機能を提供します。 最大ヒープを使用して実装しています。
クラス概要
SplPriorityQueue
implements
Iterator
Countable
/* 定数 */
public
const
int
SplPriorityQueue::EXTR_BOTH;
public
const
int
SplPriorityQueue::EXTR_PRIORITY;
public
const
int
SplPriorityQueue::EXTR_DATA;
/* メソッド */
public int compare(mixed
$priority1 , mixed $priority2 )public int count()
public mixed current()
public mixed extract()
public int getExtractFlags()
public true insert(mixed
$value , mixed $priority )public bool isCorrupted()
public bool isEmpty()
public int key()
public void next()
public bool recoverFromCorruption()
public void rewind()
public int setExtractFlags(int
$flags )public mixed top()
public bool valid()
定義済み定数
SplFixedArray クラスはじめにSplFixedArray クラスは配列の主要な機能を提供します。 SplFixedArray と通常の PHP の配列との主な違いは、 SplFixedArray は手動でリサイズしなければならないことと、 整数値で指定した範囲内の添字しか使用できないところです。 これにより、標準の array よりメモリ消費が少なくて済みます。 クラス概要
SplFixedArray
implements
IteratorAggregate
ArrayAccess
Countable
JsonSerializable
/* メソッド */
public __construct(int
$size = 0)public int count()
public mixed current()
public static SplFixedArray fromArray(array
$array , bool $preserveKeys = true )public Iterator getIterator()
public int getSize()
public mixed jsonSerialize()
public int key()
public void next()
public bool offsetExists(int
$index )public mixed offsetGet(int
$index )public void offsetSet(int
$index , mixed $value )public void offsetUnset(int
$index )public void rewind()
public array __serialize()
public bool setSize(int
$size )public array toArray()
public void __unserialize(array
$data )public bool valid()
public void __wakeup()
変更履歴
例
例1 SplFixedArray の使用例
<?php 上の例の出力は以下となります。 NULL int(2) string(3) "foo" RuntimeException: Index invalid or out of range RuntimeException: Index invalid or out of range RuntimeException: Index invalid or out of range SplObjectStorage クラスはじめにSplObjectStorage クラスは、オブジェクトをデータに対応させたり、 データを渡さずオブジェクトセットとして使用したりします。 これらはどちらも、オブジェクトを一意に特定したい場合に便利です。 クラス概要
SplObjectStorage
implements
Countable
Iterator
Serializable
ArrayAccess
/* メソッド */
public int addAll(SplObjectStorage
$storage )public void attach(object
$object , mixed $info = null )public bool contains(object
$object )public int count(int
$mode = COUNT_NORMAL )public object current()
public void detach(object
$object )public string getHash(object
$object )public mixed getInfo()
public int key()
public void next()
public bool offsetExists(object
$object )public mixed offsetGet(object
$object )public void offsetSet(object
$object , mixed $info = null )public void offsetUnset(object
$object )public int removeAll(SplObjectStorage
$storage )public int removeAllExcept(SplObjectStorage
$storage )public void rewind()
public string serialize()
public void setInfo(mixed
$info )public void unserialize(string
$data )public bool valid()
例
例1 SplObjectStorage をセットとして使用
<?php 上の例の出力は以下となります。 bool(true) bool(true) bool(false) bool(true) bool(false) bool(false) 例2 SplObjectStorage をマップとして使用
<?php 上の例の出力は以下となります。 array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } |