2011-03-02 152 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