SPLデータ構造拡張

2622 ワード

SPLはphp標準ライブラリで、いくつかの比較的実用的な関数、クラスとインタフェースをライブラリの形式でphpカーネルの中に置いて、《PHP高級プログラム設計:モード、フレームワークとテスト》の本の中でsplに対する説明はすでに非常に詳しくて、中はデータ構造のこのブロックに対して関与していません.splでは、デュアルチェーンテーブルとデュアルチェーンテーブルで実現されるキューとスタック、最大スタック、最小スタック、優先キューを含むいくつかの簡単な線形テーブルとツリー構造が実現されています.
デュアルチェーンテーブルはphp開発プログラムにとって重要なデータ構造であり、php配列をデュアルチェーンテーブルとして考えることができるが、SplDoublyLinkedListは反復器、配列アクセス、取得数のインタフェースを実現することで、プログラムアクセスオブジェクトをアクセス配列と同じように便利にする.いくつかの大規模なwebプログラムでは、多くのオブジェクトリストに関連する可能性があります.2つのチェーンテーブルでオブジェクトを保存することができます.もちろん、自分のビジネスニーズに応じて2つのチェーンテーブルを継承したり、いっそ自分でいくつかのインタフェースを実現したりすることができます.
SplDoublyLinkedListimplements Iterator, ArrayAccess, Countable {

	/*    */
	
	__construct ( void )
	
	mixed bottom ( void )
	 
	int count ( void )
	 
	mixed current ( void )
	 
	int getIteratorMode ( void )
	 
	bool isEmpty ( void )
	 
	mixed key ( void )
	 
	void next ( void )
	 
	bool offsetExists ( mixed $index )
	 
	mixed offsetGet ( mixed $index )
	 
	void offsetSet ( mixed $index , mixed $newval )
	 
	void offsetUnset ( mixed $index )
	 
	mixed pop ( void )
	 
	void prev ( void )
	 
	void push ( mixed $value )
	 
	void rewind ( void )
	 
	public string serialize ( void )
	 
	void setIteratorMode ( int $mode )
	 
	mixed shift ( void )
	 
	mixed top ( void )
	 
	public void unserialize ( string $serialized )
	 
	void unshift ( mixed $value )
	 
	bool valid ( void )
}

優先キューも非常に実用的なデータ構造であり、php内部でソートされるため、ビジネスコードは大幅に簡素化され、より効率的になります.SplPriorityQueue::setExtractFlags(int$flag)で抽出方法を設定し、データ(最大ヒープと同等)、優先度、および両方を抽出する方法を設定します.
SplPriorityQueueimplements Iterator, Countable {

	/*    */
	
	__construct ( void )
	
	int compare ( mixed $priority1 , mixed $priority2 )
	 
	int count ( void )
	 
	mixed current ( void )
	 
	mixed extract ( void )
	 
	void insert ( mixed $value , mixed $priority )
	 
	bool isEmpty ( void )
	 
	mixed key ( void )
	 
	void next ( void )
	 
	void recoverFromCorruption ( void )
	 
	void rewind ( void )
	 
	void setExtractFlags ( int $flags )
	 
	mixed top ( void )
	 
	bool valid ( void )
}

$priorityQueue = new SplPriorityQueue();
$priorityQueue->insert("2", 9);
$priorityQueue->insert("2", 8);
$priorityQueue->insert("9",  1);
$priorityQueue->insert("3",  2);

$priorityQueue->setExtractFlags(SplPriorityQueue::EXTR_BOTH);

print_r($priorityQueue->extract());
print_r($priorityQueue->extract());
print_r($priorityQueue->extract());

Array
(
    [data] => 2
    [priority] => 9
)
Array
(
    [data] => 2
    [priority] => 8
)
Array
(
    [data] => 3
    [priority] => 2
)