以下显示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时间戳的kludgy方式。但是在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
有更强大的方法吗?
答案 0 :(得分:1)
如何订购(99999999- yyyymmdd)?
看了一下手册,看来改变排序的推荐方法是扩展标准类,并提供你自己的SplPriorityQueue::compare函数。