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
더 강력한 방법이 있습니까?
유닉스 시대보다 확실히 좋은 범위입니다. 실제적인 목적을 위해, 그것은 문제를 해결합니다. SplPriorityQueue를 인스턴스화 할 때 정렬 순서를 오름차순 또는 내림차순으로 설정할 수 없다는 사실로 인해 불만족 스러울 필요가있을 것입니다. – dnagirl
99999999 대신 PHP_MAX_INT를 사용하십시오. –
PHP_INT_MAX는 32 비트와 64 비트에서 다릅니다. 또한. yyyymmdd가 될 자릿수와 동일한 99999999를 제안했는데 그 결과는 원본과 쉽게 비교할 수 있습니다. –