2015-10-12 84 views
0

也許我想要的是'太'定製,必須手動完成,我認爲usort可以做到這一點,但似乎我完全不明白它。按日期降序排序顯示的數組,但如果日期是本年度然後把那些在數組的開始:使用PHP的usort方法對數組進行排序

usort($show, function($a, $b){ 
     $year = (int) date("Y", time()); 

     $a = $a['date']; 
     $b = $b['date']; 

     if ($a === $year) return -1; 
     if ($b === $year) return -1; 

     if ($a === $b) return 0; 
     return ($a > $b) ? -1 : 1; 
    }); 
+0

它不喜歡這樣的工作。 'usort'(就像任何其他用戶定義的比較函數一樣)**不會聲明嚴格的順序來比較元素。解決方案可能是 - 排序的兩個步驟,第一:按日期排序元素(按「年份」排序),第二:將當前年份元素放在開頭(按「年份==當前年份」排序) –

回答

1

如果$a是當年和$b不是當年,就把$a第一。
如果$a不是當前年份,而$b是當前年份,則首先輸入$b
否則只是做簡單的比較/分揀$a$b

$array = array(
    1890, 
    1725, 
    2000, 
    2004, 
    2015, 
    2016, 
    2050, 
    2156, 
    2019, 
); 

usort($array, function ($a, $b) { 
    $y= date('Y'); 

    if ($a == $y && $b != $y) { 
     return -1; 
    } elseif ($a != $y && $b == $y) { 
     return 1; 
    } 

    return $b - $a; 
}); 

var_dump($array); 

// output 

Array 
(
    [0] => 2015 
    [1] => 2156 
    [2] => 2050 
    [3] => 2019 
    [4] => 2016 
    [5] => 2004 
    [6] => 2000 
    [7] => 1890 
    [8] => 1725 
) 

LIVE

+0

優秀,奇蹟般有效! – slash197