给出一个像这样的多维数组:
$data = array (
[0] => array('aDate' => '2016-01-10', 'tType' => 'Added'),
[1] => array('aDate' => '2016-01-30', 'tType' => 'RtrnCap'),
[2] => array('aDate' => '2016-01-20', 'tType' => 'Removed'),
[3] => array('aDate' => '2016-01-20', 'tType' => 'RtrnCap')
);
如何对此数组进行排序以获得此结果:
$data = array (
[0] => array('aDate' => '2016-01-10', 'tType' => 'Added'),
[1] => array('aDate' => '2016-01-20', 'tType' => 'RtrnCap'),
[2] => array('aDate' => '2016-01-20', 'tType' => 'Removed'),
[3] => array('aDate' => '2016-01-30', 'tType' => 'RtrnCap')
);
排序首先在aDate
按升序排序,第二种排序为tType
按照以下顺序自定义排序:已添加,RtrnCap,已删除。
我使用多{type} this SO question等“多键”搜索解决方案,并使用this SO question这样的usort(使用匿名函数)自定义排序一个键。这些只是解决方案的一半。 TWO排序示例使用正常的升序或降序排序顺序(我需要一个是自定义顺序)。自定义的usort示例工作正常,但它只有一组值。
底线:我需要两种排序:第一种是日期升序,第二种是自定义。
答案 0 :(得分:0)
$typeSort = function($a, $b) {
if ($a['tType'] == $b['tType']) {
return 0;
}
$priority = array('Added' => 0, 'RtrnCap' => 1, 'Removed' => 2);
return ($priority[$a['tType']] < $priority[$b['tType']]) ? -1 : 1;
};
usort($data, function ($a, $b) use ($typeSort) {
if ($a['aDate'] == $b['aDate']) {
return $typeSort($a, $b);
}
return ($a['aDate'] < $b['aDate']) ? -1 : 1;
});