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 に答える