以下は、SplPriorityQueue が、この場合は最新の日付に対応する最大の優先度値に最高の優先度を与えることを示しています。
$q=new SplPriorityQueue();
foreach(range(1,5) as $i){
$s='2011-03-' . (1+$i);
$d=date_create($s);
echo $i, ' ', $d->format('Y-m-d'),'<br/>';
$q->insert($i,$d);
}
/*
1 2011-03-02
2 2011-03-03
3 2011-03-04
4 2011-03-05
5 2011-03-06
*/
foreach($q as $i){
echo "$i ";
}
//5 4 3 2 1
優先順位として任意の日付のセットが与えられた場合、SplPriorityQueue の内容を日付の降順ではなく昇順で表示するにはどうすればよいでしょうか?
ETA: Unix のタイムスタンプを使った、ずさんな方法があります。しかし、それは Unix の時代以外では失敗します。
$q=new SplPriorityQueue();
foreach(range(1,5) as $i){
$s='2011-03-' . (1+$i);
$d=date_create($s);
$u=$d->format('U');
echo $i, ' ', $d->format('Y-m-d'), ' ',-$u,'<br/>';
$q->insert($i,-$u);
}
/*
1 2011-03-02 -1299038400
2 2011-03-03 -1299124800
3 2011-03-04 -1299211200
4 2011-03-05 -1299297600
5 2011-03-06 -1299384000
*/
foreach($q as $i){
echo "$i ";
}
//1 2 3 4 5
より堅牢な方法はありますか?