忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/24 04:22 |
Zend Framework2.1.4 Zend\Stdlib\SplPriorityQueue
前回\SplPriorityQueueを紹介しましたが、今回のZend\Stdlib\SplPriorityQueueはZendFrameworkによる\SplPriorityQueueの拡張です。
使いやすいように、配列出力やシリアライズする機能が追加されています。

<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	$queue = new Zend\Stdlib\SplPriorityQueue();
	
	$queue->insert('低い', 10);
	$queue->insert('最優先', 100);
	$queue->insert('にばんめその1', 50);
	$queue->insert('にばんめその2', 50);
	$queue->insert('一番低い', 1);
	
	// 個数 → 5
	print($queue->count());
	
	// 配列に取り出す
	$array = $queue->toArray();
	// シリアライズも可能
	$serial = $queue->serialize();
	
	// 優先順位の高い順になる
	foreach($queue as $key=>$val){
		print('キー:' . $key . ' 値:' . $val);
	}
	
	// 一度使うとやっぱり消える → 0
	print($queue->count());
	
	// シリアライズから元に戻せる
	$queue2 = new Zend\Stdlib\SplPriorityQueue();
	$queue2->unserialize($serial);

結果。
    件数:5
    一番目:最優先
    キー:4 値:最優先
    キー:3 値:にばんめその1
    キー:2 値:にばんめその2
    キー:1 値:低い
    キー:0 値:一番低い
    件数:0


結果が前回と微妙に違います。
配列のキーが0スタートになっているのと、同プライオリティのデータが順不同ではなくinsertした順に整列されるのが主な違いです。
また、toArray()、serialize()といった便利なメソッドが増えています。
配列にした場合は優先度が消えるため、配列から元に戻すことはできません。
シリアライズした場合は全情報が保存されるため、完全に元の状態に戻すことができます。

これらのためにわざわざ入れるほどの内容でもありませんが、ZFを使っているならついでにZend\Stdlib\SplPriorityQueueを使ってみてもいいかもしれません。

どうでもいいけどZend\Stdlib\SplPriorityQueue::insert()のソース中で、\SplPriorityQueue::insert()の第二引数priorityに配列を突っ込んでいました。
この使い方、\SplPriorityQueue::insert()には全く書かれていません。
何故かSplPriorityQueue::compare()のノートにしれっと書いてあるだけで、他に何処にも情報が見当たりませんでした。
その結果どうなるかというと、配列の複数の要素で優先順位を判断してくれるようです。

PR


2013/05/03 22:12 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2013/05/05 | HOME | PHP5.4.7 PHPでarray_flatten関数のパフォーマンス測定>>
忍者ブログ[PR]