根据value
& type
。简单来说,我希望按value
进行排序,但也要根据哪些其他元素已被选为types
给不太受欢迎的bigger
奖励积分。该数组看起来像这样:
[1] => Array
(
[value] => 7
[type] => A
)
[2] => Array
(
[type] => A
[value] => 5
)
[3] => Array
(
[type] => B
[value] => 4
)
[4] => Array
(
[type] => A
[value] => 34
)
我希望按value
对其进行排序,但也会混淆并对type
参数赋予一些权重。我已经拥有type
= X的顶级位置越多,我就越会给其他types
奖励值。我试过这个:
usort($myArray, function(&$a, &$b) {
static $typeCounts;
// to mix things up a bit
$bValue = $b['value'] - 10*$typeCounts[$b['type']];
$aValue = $a['value'] - 10*$typeCounts[$a['type']];
$toReturn = $bValue - $aValue; // DESC
// update type selected
if ($toReturn > 0) {
$typeCounts[$b['type']]++;
} else {
$typeCounts[$a['type']]++;
}
return $toReturn;
});
给定的示例数组应该看起来[4], [1], [3], [2]
[3]
选择[2]
而不是{{1}},因为他上面已经有两个A类元素。我假设我可以实现自己的排序函数,或者对数组进行多次排序,但是正在寻找一种优雅的解决方案。