usort排序降序而不是升序超过2个阵列

时间:2014-10-29 16:33:05

标签: php usort

合并4个数组后,我使用usort通过Date对最终数组进行排序。然而,它以升序的方式排序,我需要它是Descending。当只有2个数组被合并时,我已经看到了降序排序的解决方案,但没有超过2个的例子。

每个数组($ files,$ newfiles,$ comments和$ ratings)都有以下字段:ID,Title,Date和Type。我需要通过Date Descending对它们进行排序。这是我目前的代码:

    function dateSort($a,$b,$c,$d){
$dateA = strtotime($a['Date']);
$dateB = strtotime($b['Date']);
$dateC = strtotime($c['Date']);
$dateD = strtotime($d['Date']);


 return ($dateA-$dateB-$dateC-$dateD);

  //I HAVE ALSO TRIED REVERSING THE ORDER LIKE THIS BUT NO LUCK.  
 //THE SORTING IS STRANGE AND UN ORDERED WHEN I DO THIS:
 // return ($dateD-$dateC-$dateB-$dateA);

 }

    $result = array_merge($files, $newfiles,$comments,$ratings);

    usort($result, 'dateSort');

2 个答案:

答案 0 :(得分:5)

$descending_array = array_reverse(usort($result, 'dateSort'));

这会反转数组,从而将升序反转为降序。

答案 1 :(得分:0)

这是一个古老的问题,但它出现在某些搜索结果的顶部附近。

我还没有测试过,但是usort的可调用部分将遍历您提供的任何数组。每个元素本身是否都是数组都没有关系。

在您提供的示例中,DateTime个对象也是可比较的。

根据Date字段的格式,您可以尝试在php 7中使用太空飞船操作符:

usort($result, function($a, $b) {
    return new \DateTime( $a['Date'] ) <=> new \DateTime( $b['Date'] );
});

这将返回以顺序排序的数组。反转比较将使其下降

usort($result, function($a, $b) {
    return new \DateTime( $b['Date'] ) <=> new \DateTime( $a['Date'] );
});