2011-03-02 146 views
1

下面显示SplPriorityQueue给出最大优先级值的最高优先级,在这种情况下,最大优先级值对应于最新日期。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 

有没有更强大的方法?

回答

1

如何按(99999999- yyyymmdd)排序?

看了一下手册,看起来改变排序的推荐方法是扩展标准类,并提供自己的SplPriorityQueue::compare函数。

+0

这绝对是比Unix时代更好的范围。出于实际的目的,它解决了这个问题。我想我只需要忍受自己对实例化SplPriorityQueue时无法设置排序顺序以升序或降序的事实的不满。 – dnagirl 2011-03-03 14:10:49

+0

使用'PHP_MAX_INT'而不是99999999 – 2016-12-01 17:21:35

+0

PHP_INT_MAX在32位和64位上不同。也。我建议99999999,因为它与yyyymmdd的位数相同,并且结果仍然会与原始文件 – 2016-12-31 11:08:04