贪婪排序的数值 - #numOfSameTypeSoFar

时间:2014-02-06 09:38:04

标签: php arrays sorting

根据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类元素。我假设我可以实现自己的排序函数,或者对数组进行多次排序,但是正在寻找一种优雅的解决方案。

0 个答案:

没有答案