2015-10-12 132 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