Ниже показано, что 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
Есть ли более надежный способ?