SplPriorityQueue按升序排列
问题描述:
下面显示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
有没有更强大的方法?
这绝对是比Unix时代更好的范围。出于实际的目的,它解决了这个问题。我想我只需要忍受自己对实例化SplPriorityQueue时无法设置排序顺序以升序或降序的事实的不满。 – dnagirl 2011-03-03 14:10:49
使用'PHP_MAX_INT'而不是99999999 – 2016-12-01 17:21:35
PHP_INT_MAX在32位和64位上不同。也。我建议99999999,因为它与yyyymmdd的位数相同,并且结果仍然会与原始文件 – 2016-12-31 11:08:04