PHP 5.3 이상을 사용하고있어 일급 익명 기능없이이 작업을 수행하는 것이 고통 스럽습니다.
귀하의 정렬은 다음과 같아야합니다. 변수가 어떻게 작동하는지 보여주기 위해 변수를 몇 가지 샘플 데이터로 대체했습니다.
귀하의 요청을 두 가지 방식으로 해석 할 수 있습니다. 두 가지 모두에 대한 예제를 제공 할 것입니다. 에서
$fake_dates = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$current_date = 5;
$picky_date_sort = function($a, $b) use($current_date) {
if($a > $current_date && $b <= $current_date)
return -1;
if($b > $current_date && $a <= $current_date)
return 1;
if($a > $current_date || $b > $current_date)
return $a - $b;
return $b - $a;
};
usort($fake_dates, $picky_date_sort);
print_r($fake_dates);
테스트 결과 :보다
Array
(
[0] => 6
[1] => 7
[2] => 8
[3] => 9
[4] => 5
[5] => 4
[6] => 3
[7] => 2
[8] => 1
[9] => 0
)
날짜보다가 "지금"상단에 있습니다. 그들은 오름차순으로 정렬됩니다. 즉, 목록을 내려갈수록 미래로 나아갑니다. 목록의 해당 섹션이 완료되고 과거를 다시 히트하면 더 낮은 날짜보다 높은 새 날짜로 내림차순 정렬이 반환됩니다.
그러나 요청을 해석 할 수도 있습니다. "나는 과거를 과거에서 분리하는 것에 대해 신경 쓰지 않고, 지금 가장 위에있는 것이 가장 좋습니다."라고 해석 할 수도 있습니다. 더 쉽습니다. 우리는 숫자 사이의 절대적인 차이를 얻기 위해 abs
을 찾아 낼 것입니다.
Array
(
[0] => 5
[1] => 6
[2] => 4
[3] => 7
[4] => 3
[5] => 8
[6] => 2
[7] => 1
[8] => 9
[9] => 0
)
에
$absolute_diff_sort = function($a, $b) use($current_date) {
$abs_b = abs($b - $current_date);
$abs_a = abs($a - $current_date);
return $abs_a - $abs_b;
};
usort($fake_dates, $absolute_diff_sort); print_r($fake_dates);
결과는하기 (5) 상단에있다. 목록을 아래로 내려 가면 과거와 미래의 날짜를 혼합하여 현재와 다음의 절대적인 차이가 커집니다.
이러한 해석이 의미하는 바가 없다면 질문을 명확히해야합니다.
Omg! 무슨 대답이야! :) –
나는 동의한다, 많이 고마워한다! – Johan
첫 번째 옵션은 저에게 가장 오래된 날짜를 먼저주는 것처럼 보입니다. 왜 그런가요? – Johan