2011-03-02 6 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의 내용이 오름차순이 아닌 날짜 내림차순 에 나올 발생할 수 있습니다, 우선 순위와 같은 날짜의 임의의 집합을 감안할 때?

예상 답변 : 유닉스 타임 스탬프를 사용하는 kludgy 방법이 있습니다. 그러나 이것은 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

유닉스 시대보다 확실히 좋은 범위입니다. 실제적인 목적을 위해, 그것은 문제를 해결합니다. SplPriorityQueue를 인스턴스화 할 때 정렬 순서를 오름차순 또는 내림차순으로 설정할 수 없다는 사실로 인해 불만족 스러울 필요가있을 것입니다. – dnagirl

+0

99999999 대신 PHP_MAX_INT를 사용하십시오. –

+0

PHP_INT_MAX는 32 비트와 64 비트에서 다릅니다. 또한. yyyymmdd가 될 자릿수와 동일한 99999999를 제안했는데 그 결과는 원본과 쉽게 비교할 수 있습니다. –

관련 문제