1

下面显示了 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 

有没有更健壮的方法?

4

1 回答 1

1

按 (99999999- yyyymmdd) 订购怎么样?

查看手册后,更改排序的推荐方法似乎是扩展标准类,并提供您自己的SplPriorityQueue::compare函数。

于 2011-03-03T00:33:41.190 回答