前回\SplPriorityQueueを紹介しましたが、今回のZend\Stdlib\SplPriorityQueueはZendFrameworkによる\SplPriorityQueueの拡張です。
使いやすいように、配列出力やシリアライズする機能が追加されています。
結果。
件数: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()のノートにしれっと書いてあるだけで、他に何処にも情報が見当たりませんでした。
その結果どうなるかというと、配列の複数の要素で優先順位を判断してくれるようです。
使いやすいように、配列出力やシリアライズする機能が追加されています。
<?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