合并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');
答案 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'] );
});