PHP5.3でSplPriorityQueue、優先度つきキューが実装されました。
取得時、第二引数の値が高いものから順に並べ替えられます。
出力
件数:5
一番目:最優先
キー:5 値:最優先
キー:4 値:にばんめその2
キー:3 値:にばんめその1
キー:2 値:低い
キー:1 値:一番低い
件数:0
優先したいデータから順に表示することができました。
なお、同じ優先度内での順番がどうなるかは保証されていません。
実用としてはわりと困ることに、Wikipediaの定義通りの実装がなされています。
どういうことって一度使ったら無くなってしまうんですよね。
具体的にはSplPriorityQueue::next()したときに、イテレータを進めるかわりにshiftするので値が消滅します。
なので繰り返し使う場合はcloneするか、配列に取り出すなどしてから扱う必要があります。
取得時、第二引数の値が高いものから順に並べ替えられます。
<?php $queue = new SplPriorityQueue(); $queue->insert('低い', 10); $queue->insert('最優先', 100); $queue->insert('にばんめその1', 50); $queue->insert('にばんめその2', 50); $queue->insert('一番低い', 1); // 個数 → 5 print('件数:' . $queue->count()); // 一番目を閲覧。これは使っても無くならない。 print('一番目:' . $queue->top()); // 優先順位の高い順に取り出す foreach($queue as $key=>$val){ print('キー:' . $key . ' 値:' . $val); } // 一度使うと無くなる → 0 print('件数:' . $queue->count()); // rewindは意味がない $queue->rewind();
出力
件数:5
一番目:最優先
キー:5 値:最優先
キー:4 値:にばんめその2
キー:3 値:にばんめその1
キー:2 値:低い
キー:1 値:一番低い
件数:0
優先したいデータから順に表示することができました。
なお、同じ優先度内での順番がどうなるかは保証されていません。
実用としてはわりと困ることに、Wikipediaの定義通りの実装がなされています。
どういうことって一度使ったら無くなってしまうんですよね。
具体的にはSplPriorityQueue::next()したときに、イテレータを進めるかわりにshiftするので値が消滅します。
なので繰り返し使う場合はcloneするか、配列に取り出すなどしてから扱う必要があります。
PR